假设有两个Activity,分别是MainActivity,SecondActivity.
MainActivity有一个EditText编辑框,设想一种情况:当我们编辑了一些内容时,MainActivity被跳转去了econdActivity,而正好系统又将MainActivity杀死,如果我们不对EditText的内容加以保存,当系统再度恢复MainActivity时,编辑好的内容就不会出现了。
可以借助onSaveInstanceState方法来保存Acitivity状态.
MainActivity:
- package com.example.onsaveinstancestatedemo;
- import android.R.string;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.support.v4.app.NavUtils;
- public class MainActivity extends Activity {
- private EditText txt;
- private Button btn;
- private final static String TAG="MainActivity";
- private final static String KEY="key";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- txt=(EditText)findViewById(R.id.editText1);
- if(savedInstanceState!=null&&savedInstanceState.containsKey(KEY)==true)//如果savedInstanceState不为空,用KEY值找到对应的EditText内容,填入EditText控件
- {
- txt.setText(savedInstanceState.getString(KEY));
- }
- btn=(Button)findViewById(R.id.btn);
- Log.i(TAG, "MainActivity-->onCreate");
- btn.setOnClickListener(listener);
- }
- private View.OnClickListener listener=new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- // TODO Auto-generated method stub
- Intent intent=new Intent(MainActivity.this,SecondActivity.class);
- startActivity(intent);
- }
- };
- @Override
- protected void onSaveInstanceState(Bundle outState)//在一个Activity进入不可见状态,被onStop之前,系统会调用onSavedInstanceState来保存状态
- {
- // TODO Auto-generated method stub
- super.onSaveInstanceState(outState);
- String content=txt.getText().toString();//将EditText的内容保存到Bundle中,以便下次恢复Activity时读取
- outState.putString(KEY, content);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- }