gpt4 book ai didi

android - Activity 中 oncreate 和 onRestoreInstanceState 方法的区别

转载 作者:行者123 更新时间:2023-11-29 17:48:13 25 4
gpt4 key购买 nike

伙计们,我遇到了这两种方法的问题:-

当我更改设备的方向并在从包中检索文本后在编辑文本中设置文本时,它不起作用。但是相同的代码在 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 类对象。请帮我解决这个问题..

最佳答案

EditText 和大多数其他 View 都有自己的方法来保存/恢复自己的数据。所以通常没有必要在您的代码中保存/恢复它们。

您可以在 Android TextView source code 上看到这个(记住 EditText 从 TextView 扩展而来)第 3546 行:

if (ss.text != null) {
setText(ss.text);
}

所以你不能设置它的原因 onCreate 而可以设置 onRestoreInstanceState 这是因为在你的 Activity 期间 super.onRestoreInstanceState(savedInstanceState)该 Activity 调用 EditText.onRestoreInstanceState 并且 EditText 将其自行恢复为之前的值。

您可以在 Activity source code 上看到它发生在 940 号线上

protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (mWindow != null) {
Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG);
if (windowState != null) {
mWindow.restoreHierarchyState(windowState);
}
}
}

希望对您有所帮助。

关于android - Activity 中 oncreate 和 onRestoreInstanceState 方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com