当涉及到拯救一个州的时候,我很困惑。因此,我知道当活动即将被销毁时,将调用onSaveInstanceState(Bundle)
。但是,如何在其中存储信息并将其恢复到onCreate(Bundle savedInstanceState)
中的原始状态呢?我不明白这个包是如何恢复信息的。如果有人能提供一个例子,那将是有帮助的。开发人员指南并没有很好地解释这一点。
public class Conversation extends Activity {
private ProgressDialog progDialog;
int typeBar;
TextView text1;
EditText edit;
Button respond;
private String name;
private String textAtView;
private String savedName;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dorothydialog);
text1 = (TextView)findViewById(R.id.dialog);
edit = (EditText)findViewById(R.id.repsond);
respond = (Button)findViewById(R.id.button01);
if(savedInstanceState != null){
savedInstanceState.get(savedName);
text1.setText(savedName);
}
else{
text1.setText("Hello! What is your name?");
respond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = edit.getText().toString();
text1.setText("Nice to meet you "+ name);
}
});
}
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString(savedName, name);
}
}
发布于 2011-06-30 03:00:03
Bundle
是一个容器,其中包含您要保存的所有信息。您可以使用put*函数向其中插入数据。下面是可用于在Bundle
中存储数据的put函数的简短列表(还有更多)。
putString
putBoolean
putByte
putChar
putFloat
putLong
putShort
putParcelable (used for objects but they must implement Parcelable)
在您的onCreate
函数中,此Bundle
被返回给程序。检查应用程序是否正在重新加载或首次启动的最佳方法是:
if (savedInstanceState != null) {
// Then the application is being reloaded
}
要返回数据,请使用get*函数,就像使用put*函数一样。数据以名称-值对的形式存储。这就像是一个hashmap。你提供一个键和值,然后当你想取回值时,你给出键,函数获得值。下面是一个简短的示例。
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("message", "This is my message to be reloaded");
super.onSaveInstanceState(outState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
String message = savedInstanceState.getString("message");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
您保存的消息将显示在屏幕上。希望这能有所帮助。
发布于 2015-03-20 12:48:18
一个不错的信息:您不需要在onCreate()方法中检查Bundle对象是否为null。使用onRestoreInstanceState()方法,系统在onStart()方法之后调用该方法。仅当存在要恢复的已保存状态时,系统才会调用onRestoreInstanceState(),因此无需检查包是否为空
发布于 2011-06-30 02:59:00
基本上,捆绑包( bundle outBundle)会给你一个捆绑包。当你查看Bundle类时,你会发现你可以在里面放很多不同的东西。在下一次调用onCreate()时,您只需将该包作为参数返回。然后,您可以再次读取您的值并恢复您的活动。
假设您有一个包含EditText的活动。用户在其中写了一些文本。之后,系统会调用您的onSaveInstanceState()。您可以通过Bundle.putString("edit_text_value",theValue)从EditText中读取文本并将其写入包中。
现在调用onCreate。检查所提供的包是否不为空。如果是这样的话,你可以通过Bundle.getString("edit_text_value")恢复你的值并把它放回你的EditText中。
https://stackoverflow.com/questions/6525698
复制相似问题