繁体   English   中英

如何保持活动的先前状态

[英]How to maintain the previous state of an activity

我有两个活动(activity1和activiy2),每个活动都有一个按钮。 在activity1中,我有一个很少选项的微调器。 假设我从这个微调器中选择选项2,我单击activity1中的按钮,然后activity2启动。 当我点击后退按钮时,activity1恢复,同样的选项2可见(我需要)。 现在的问题是,如果我的activity2已启动,并且我单击其中的按钮,则启动activity1。 但它不是恢复以前的activity1状态,而是以刚刚创建的方式启动,并且之前的选择被更改。 我怎么能得到像后退按钮一样的设施(不是回到以前的活动的设施,我的意思是自动恢复任何活动的先前状态),即使我再次开始活动。 简单地说,如果再次访问活动,我需要知道如何维护活动的先前状态。

使用此代码,当单击按钮时,我会从一个活动转到另一个活动:

Intent intent=new Intent();
intent.setClassName(getApplicationContext(),"com.myapp.activityname");

startActivity(intent);

请帮助我。我是android的初学者,所以如果有人给出答案,请解释一下。 谢谢你的意见

我想我找到了答案。 让我用简单的话说出我的所作所为,

假设我有两个活动activity1和activity2,我从activity1导航到activity2(我已经在activity2中完成了一些工作),然后通过单击activity1中的按钮再次返回到活动1。 现在在这个阶段我想回到activity2,我想在上次离开activity2时看到我的activity2处于相同的状态。

对于上面的场景,我所做的是在清单中我做了一些像这样的更改:

<activity android:name=".activity2"
          android:alwaysRetainTaskState="true"
          android:launchMode="singleInstance">
</activity>

在按钮点击事件的activity1中我做了这样的事情:

Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(this,"com.mainscreen.activity2");
startActivity(intent);

在按钮点击事件的activity2中我做了这样的事情:

Intent intent=new Intent();
intent.setClassName(this,"com.mainscreen.activity1");
startActivity(intent);

现在将会发生的事情是,我们在activity2中所做的任何更改都不会丢失,我们可以在与之前离开的状态相同的状态下查看activity2。

我相信这是答案,这对我来说很好。

通过重写Activity的onSaveInstanceState事件处理程序,您可以使用其Bundle参数来保存实例值。 这是一个例子:

@Override
public void onSaveInstanceState(Bundle outState) {
    // Retrieve the View
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    // Save its state
    outState.putString("My text",
    myTextView.getText().toString());
    super.onSaveInstanceState(outState);
}

如果在会话期间强制应用程序重新启动,则保存的Bundle将传递到onRestoreInstanceStateonCreate方法。 然后,您可以从Bundle中提取值并使用它们来更新Activity实例状态。 这是一个例子:

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    String text = “”;    
    if (icicle != null && icicle.containsKey("My text")) {
        text = icicle.getString(TEXTVIEW_STATE_KEY);
    }
    myTextView.setText(text);
}

重要的是要记住onSaveInstanceState仅在Activity变为非活动时被调用,而不是在被finish调用或用户按Back按钮关闭时调用。

下载源代码或查看整篇文章

对于活动一,您需要使用startActivityForResult()函数,该函数将值返回给父活动,即父活动。

    Intent intent = new Intent(MainActivity.this, Activity2.class);
   startActivityForResult(intent, 1);

要在不更改活动1的情况下从活动2接收值,请添加以下代码

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1) {
                if(resultCode == RESULT_OK){
                    String text=data.getStringExtra("text");
                    vTxt.setText("Name 1: "+eTxt.getText()+ "\n Name 2: "+text);
                }
            }
        }

活动2

添加以下代码以返回活动1并传递一些值

         Intent intent=new Intent(Activity2.this, MainActivity.class);

           Bundle extra=new Bundle();

           extra.putString("text", eTxt.getText().toString());
           intent.putExtras(extra);
           setResult(RESULT_OK, intent);
           finish();

最后你完成了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM