伙计我遇到了这两种方法的问题: -
当我更改设备的方向并在从包中检索文本后在编辑文本中设置文本时,它不起作用。但是相同的代码在onrestoreStoreInstante方法中工作。
请查看我的代码: -
public class LifeCycleActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
EditText user;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
user=(EditText)findViewById(R.id.et_user);
if(savedInstanceState!=null){
String s =savedInstanceState.get("Key").toString();
user=(EditText)findViewById(R.id.et_user);
user.setText(savedInstanceState.get("Key").toString());
Toast.makeText(this, s,Toast.LENGTH_SHORT).show();
}
Toast.makeText(this, "onCreate",Toast.LENGTH_SHORT).show();
Button b=(Button)findViewById(R.id.button1);
b.setOnClickListener(this);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Toast.makeText(this, "onSaveInstanceState",Toast.LENGTH_SHORT).show();
outState.putString("Key", "Deepak");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//String s =savedInstanceState.get("Key").toString();
//user.setText(s);
Toast.makeText(this, "onRestoreInstanceState",Toast.LENGTH_SHORT).show();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Toast.makeText(this, "onStart",Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Toast.makeText(this, "onResume",Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Toast.makeText(this, "onPause",Toast.LENGTH_SHORT).show();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Toast.makeText(this, "onStop",Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "onDEstroy",Toast.LENGTH_SHORT).show();
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Toast.makeText(this, "onRestart",Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startActivity(new Intent(LifeCycleActivity.this,SecondActivity.class));
}
}
当我从Bundle获取值后在oncreate方法中设置编辑文本中的文本时,它不起作用。但是相同的代码在onRestoreInstanceState()方法中有效。
根据我的说法,它也适用于oncreate,因为我们可以在那里获得Bundle类对象。 请帮我解决这个问题..
答案 0 :(得分:2)
EditText
并且大多数其他视图都有自己的方法来保存/恢复自己的数据。因此,一般情况下,没有必要在代码上保存/恢复它们。
你可以在{35}上的Android TextView source code(请记住EditText从TextView扩展)中看到这一点:
if (ss.text != null) {
setText(ss.text);
}
因此您无法设置onCreate
并且可以onRestoreInstanceState
这样做的原因是因为在您的活动super.onRestoreInstanceState(savedInstanceState)
期间,活动会调用EditText.onRestoreInstanceState
并且EditText将其自身恢复为之前的值。
你可以在第940行的Activity source code上看到它发生了
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}
希望它有所帮助。
答案 1 :(得分:1)
<强>概述强>
onSaveInstanceState()
用于将数据绑定到onRestoreInstanceState()
用于设置可用的数据
捆绑到您的活动请按以下步骤操作:
onorientation
改变了
捆绑包不可用,这是你无法检索它的方式
在oncreate
oncreate
onRestoreInstanceState
希望这会有所帮助!