`
zhengdl126
  • 浏览: 2509668 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Activity状态保存

 
阅读更多

  1、当我们正在发短信的时候,已经写了几百字了,这时突然来了一个电话,我们接完电话之后,如果发现辛辛苦苦的几百字不见了,那可就火大了,而实际上这些 内容都是保存了的。在我们接电话的过程中,我们发信息的那个Activity是可能会被系统回收的,这时会调用Activity的 onSaveInstanceState回调方法,而我们就可以在这个方法中保存状态数据,在onCreate方法或者在2.0之后提供的回调方法 onRestoreInstanceState中进行状态数据恢复。

    2、当我们在玩游戏的时候,可能又想听歌,然后我们会按home或者back键退出游戏去启动音乐,然后再回到游戏,当我们回到游戏的时候,发现刚刚的状 态还是被保存的。这种情况,我们可以这样保存状态。在onPause方法中保存状态数据,在onResume方法中进行状态恢复。


下面和大家分享一下,这两种情况保存状态的实现代码:

主Activity

package com.zyb.state;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends Activity {
    //内容输入框
    private EditText content;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        content=(EditText)findViewById(R.id.content);
        if(savedInstanceState!=null){
            //得到保存的数据
            String saveString=savedInstanceState.getString("content");
            //恢复数据
            content.setText(saveString);
        }
    }
    /**
     * 在该方法中保存状态数据
     */
    @Override
    protected void onPause() {
        super.onPause();
        //得到要保存的输入框的内容
        String saveString=content.getText().toString();
        SharedPreferences sp=this.getSharedPreferences("save", Context.MODE_PRIVATE);
        //保存输入框的内容
        sp.edit().putString("content", saveString).commit();
    }
    /**
     * 在该方法中恢复状态数据
     */
    @Override
    protected void onResume() {
        //得到保存的内容
        String saveString=this.getSharedPreferences("save", Context.MODE_PRIVATE).getString("content", null);
        //恢复内容
        content.setText(saveString);
        super.onResume();
    }
    /**
     * 在该方法中保存状态数据
     */
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        //得到要保存的输入框的内容
        String saveString=content.getText().toString();
        //保存输入框的内容
        outState.putString("content", saveString);
        super.onSaveInstanceState(outState);
    }
    
}


main.xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<EditText
    android:id="@+id/content"  
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

程序运行之后我们在输入框中输入一些内容,然后按back或者home键退出,再次进入程序,上次输入的数据还是保存的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics