首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用onSavedInstanceState示例

如何使用onSavedInstanceState示例
EN

Stack Overflow用户
提问于 2011-06-30 02:51:15
回答 4查看 127.1K关注 0票数 114

当涉及到拯救一个州的时候,我很困惑。因此,我知道当活动即将被销毁时,将调用onSaveInstanceState(Bundle)。但是,如何在其中存储信息并将其恢复到onCreate(Bundle savedInstanceState)中的原始状态呢?我不明白这个包是如何恢复信息的。如果有人能提供一个例子,那将是有帮助的。开发人员指南并没有很好地解释这一点。

代码语言:javascript
复制
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);
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-30 03:00:03

Bundle是一个容器,其中包含您要保存的所有信息。您可以使用put*函数向其中插入数据。下面是可用于在Bundle中存储数据的put函数的简短列表(还有更多)。

代码语言:javascript
复制
putString
putBoolean
putByte
putChar
putFloat
putLong
putShort
putParcelable (used for objects but they must implement Parcelable)

在您的onCreate函数中,此Bundle被返回给程序。检查应用程序是否正在重新加载或首次启动的最佳方法是:

代码语言:javascript
复制
if (savedInstanceState != null) {
    // Then the application is being reloaded
}

要返回数据,请使用get*函数,就像使用put*函数一样。数据以名称-值对的形式存储。这就像是一个hashmap。你提供一个键和值,然后当你想取回值时,你给出键,函数获得值。下面是一个简短的示例。

代码语言:javascript
复制
@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();
    }
}

您保存的消息将显示在屏幕上。希望这能有所帮助。

票数 201
EN

Stack Overflow用户

发布于 2015-03-20 12:48:18

一个不错的信息:您不需要在onCreate()方法中检查Bundle对象是否为null。使用onRestoreInstanceState()方法,系统在onStart()方法之后调用该方法。仅当存在要恢复的已保存状态时,系统才会调用onRestoreInstanceState(),因此无需检查包是否为空

票数 6
EN

Stack Overflow用户

发布于 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中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6525698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档