Code Bye

onSaveInstanceState()方法问题

public class MainActivity extends Activity {
public static final String EXTRA_MESSAGE = “com.example.demotwotwo”;
public static final String editTextString = “MainActivity_editTextString”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState!=null)
((EditText)findViewById(R.id.editText)).setText(savedInstanceState.getString(editTextString));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(editTextString, ((EditText)findViewById(R.id.editText)).getText().toString());
}
}
为什么在onSaveInstanceState()方法里面本人保存了EditText里面输入的信息,但是在回到这个Activity里面时又没法还原刚才输入的信息了?
解决方案

5

你重写onSaveInstanceState()方法时,将outState.putString(editTextString, ((EditText)findViewById(R.id.editText)).getText().toString());放到super.onSaveInstanceState(outState)前面。

5

错了错了,是你的类型错了吧,不是EditText吧,改成String试试。

20

savedInstanceState  数据的保存只适用于 activity恢复时候。
对于新建的activity,savedInstanceState  =null;
返回再进入该act就是新建。
你的需求可以用sharePreferences 解决。
onPause/onDestory时保存, onCreate时候读取。

5

不会释放掉的,除非你调用了finish.

5

引用:
Quote: 引用:
Quote: 引用:

savedInstanceState  数据的保存只适用于 activity恢复时候。
对于新建的activity,savedInstanceState  =null;
返回再进入该act就是新建。
你的需求可以用sharePreferences 解决。
onPause/onDestory时保存, onCreate时候读取。

对,本人觉得是在新建,原因是本人从第二个Activity返回的时候,第一个就调用了onDestroy()方法,然后才调用onCreate()新建第一个Activity,在进入第二个Activity的时候第一个Activity不是应该调用onStop()方法吗?为什么就直接Destroy了呢?莫非是原因是内存不够,虚拟机自动调用onDestroy()释放内存?

本人懂了,像在按home键回桌面再回来就不会调用onDestroy()方法,本人的代码就有效,但是假如进入到下一级Activity再回来的时候,第一个Activity就会onDestroy(),就没法保存了,不过你的sharePreferences有效,谢谢!
也谢谢楼上各位!

对啊,本人本人也写了个例子,可以的保存的啊。你本人调用finish了吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明onSaveInstanceState()方法问题