• Activity状态保存的两种方式


      在Activity中常常会用到状态保存,比如正在编辑文本突然进来一通电话,这时当前的Activity就会被覆盖,若不进行状态保存则等到接完电话后,会发现编辑内容已经消失。

      在Android中状态保存通常有两种方式:

      1. 第一种是使用savedInstanceState。savedInstanceState是一个Bundle对象,类似HashMap以键值对的形式存在。通常用于保存当Activity被另一Activity遮挡或是覆盖时使用。

      2. 第二种是试用SharedPreference来保存。众所周知,SharedPreference是以xml格式存储数据。通常在当用户按下back或是home键。在Activity生命周期onPause()时使用SharedPreference记录当前状态,而在onResume()时,恢复其状态。

      下面就来举两个例子吧。

    1. 使用savedInstanceState保存Activity状态

    public class TestActivity extends Activity {

    private EditText edit = null;

    private final String key = "key";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    edit = (EditText) super.findViewById(R.id.edit);

        if(edit != null && savedInstanceState != null){
          edit.setText(savedInstanceState.getString(key)); //读取保存状态
        }

     }

       

      @Override

          protected void onRestoreInstanceState(Bundle savedInstanceState) {

    edit.setText(savedInstanceState.getString("word"));//保存状态
    super.onRestoreInstanceState(savedInstanceState);
    }

     2. 使用SharedPreference保存状态

      

    public class TestActivity extends Activity {

      private EditText edit = null;

      private final String key = "key";

      @Override

      protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        edit = (EditText) super.findViewById(R.id.edit);

        if(edit != null && savedInstanceState != null){
          edit.setText(savedInstanceState.getString(key)); //读取保存状态
        }

     }

       

      

      @Override
      protected void onPause() {
        super.onPause();
        this.getPreferences(MODE_PRIVATE).edit().putString("word", edit.getText().toString()).commit();
      }

      @Override
      protected void onResume() {
        super.onResume();
        edit.setText(this.getPreferences(MODE_PRIVATE).getString("word", ""));
      }

    效果图:

     输入数据                           切换横屏后保存了Activity的状态

                                                           

  • 相关阅读:
    mysql正则表达式
    阿里云OSS 获取目录下所有文件
    docker 部署mvc项目 <四>
    docker部署项目 <三>
    docker 安装mysql数据库 <二>
    docker安装 <一>
    安装 Docker <一>
    Mongodb字段自增长
    EF的使用<三>
    EF 简单介绍<一>
  • 原文地址:https://www.cnblogs.com/vicma/p/3559410.html
Copyright © 2020-2023  润新知