✏️
Android应用开发
  • 简介
  • 目录
  • 第一章 熟悉Android Studio开发环境
    • 第一个项目——Hello World!
    • 第二个项目——计数器
    • 第三个项目——新闻阅读器
  • 第二章 活动、组件及布局
    • 第四个项目——消息发送
    • 第五个项目——计数器2
    • 第六个项目——登陆界面
    • 第七个项目——新闻列表
  • 第三章 数据持久化
    • 第八个项目——登陆界面2
    • 第九个项目——新闻列表2
  • 第四章 内容提供器与数据共享
    • 第十个项目——音乐播放器1
  • 第五章 多媒体与服务
    • 第十一个项目——音乐播放器2
    • 第十二个项目——音乐播放器3
  • 第六章 绑定服务与自定义广播
    • 第十三个项目——音乐播放器4
  • 第七章 网络与多线程
    • 第十四个项目——新闻列表3
  • 附录 扩展项目
    • 第十五个项目——使用ViewHolder提升ListView显示性能
    • 第十六个项目——使用SwipeRefreshLayout实现下拉刷新
    • 第十七个项目——使用接口回调实现删除ListView列表中的Item数据
    • 第十八个项目——使用RecyclerView显示列表数据
    • 第十九个项目——使用Fragment组织UI页面
    • 第二十个项目——使用CursorAdapter进行数据绑定及渲染
    • 第二十一个项目——使用Loader实现异步数据加载操作
    • 第二十二个项目——使用TimerTask及Handler实现秒表计时器
    • 第二十三个项目——使用AsyncTask进行网络异步请求
Powered by GitBook
On this page
  • 实验目的
  • 实验要求
  • 实验内容
  • 步骤一,打开名为Code02的Android工程
  • 步骤二,保存计数值
  • 步骤三,读取计数值
  • 步骤四,重新编译工程并查看运行结果
  • 实验小结

Was this helpful?

  1. 第二章 活动、组件及布局

第五个项目——计数器2

实验目的

  • 掌握AndroidManifest.xml配置清单文件的结构;

  • 掌握使用Intent显式启动Activity的方式;

  • 掌握如何为Activity添加返回父Activity的方法;

实验要求

  • 能通过Intent对象向Activity传递数据;

实验内容

步骤一,打开名为Code02的Android工程

编译、部署该App,运行时点击COUNT按钮后,TextView文本控件的计数发生变化。此时点击AVD虚拟机 的Rotate按钮,TextView的计数将清零。导致该问题的原因是设备屏幕发生旋转时会导致Android系统的配置 发生改变,从而引起当前的Activity被销毁后重新被创建,详细描述见Activity的生命周期。

Activity被创建时,加载activity_ main.xml创建布局,在该布局文件中,我们对TextView设置了文本的初始值为0。 因此,每当设备屏幕发生旋转时,TextView的计数值都被清零。解决该问题的方法是每次Activity销毁时保存计数值,Activity被重新 创建时在将保存的计数值设置为TextView显示的文本。

步骤二,保存计数值

Activity被销毁时,可在onSaveInstanceState()方法中保存计数值。Activity被重新创建时,可在 onCreate()方法或onRestoreInstanceState()方法中恢复TextView显示的计数值。

如下代码所示,onSaveInstanceState()方法传递一个Bundle对象,该对象以键值对形式 保存Activity的状态信息(包括布局状态),待Activity被重新创建时,Android运行时将该Bundle对象传递给onCreate()方法或onRestoreInstanceState()方法。 通过Bundle对象的putInt()可以保存int型的数值。

public class MainActivity extends AppCompatActivity {

    private static final String COUNT_VALUE = "count_value";
    private int count = 0;

    @Override
     protected void onSaveInstanceState(Bundle outState) \{ 
         outState.putInt(COUNT_ VALUE, count); 
         super.onSaveInstanceState(outState); 
    }
    ...
}

步骤三,读取计数值

当Activity被重新创建时,之前保存的Bundle对象将被传递给onCreate()方法或onRestoreInstanceState()方法。 这两个方法中使用Bundle参数有所区别,前者需要判断传递进入的Bundle参数是否为null,而后者不需要判断。

我们选择在onRestoreInstanceState()方法中恢复计数值,使用Bundle对象的getInt()方法可获取之前保存的计数器的值,代码如下所示。

public class MainActivity extends AppCompatActivity {
    ...
     TextView tvCount; 

    @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) \{ 
        super.onRestoreInstanceState(savedInstanceState);

         count = savedInstanceState.getInt(COUNT_ VALUE); 
        if (tvCount != null) {
             tvCount.setText(Integer.toString(count)); 
        }
    }

步骤四,重新编译工程并查看运行结果

重新编译、部署App后,点击AVD虚拟机的Rotate按钮,查看TextView的计数值是否有改变。

实验小结

通过本次实验,你应该掌握了如下知识内容:

  • Activity生命周期的各状态;

  • 使用AVD虚拟机的Rotate按钮旋转设备屏幕;

  • 使用onSaveInstanceState方法保存Activity状态;

  • 使用onRestoreInstanceState方法恢复Activity状态;

Previous第四个项目——消息发送Next第六个项目——登陆界面

Last updated 4 years ago

Was this helpful?

图1. 点击**Rotate**按钮旋转屏幕