Android:保留之前活动的值

时间:2017-03-03 13:53:15

标签: java android

我有一个主要活动,其中有一个微调器和一个按钮。微调器包含四个项目:项目1,项目2,项目3,项目4.加载此活动时,默认选择项目1。单击该按钮,将调用新活动(activity2),如下所示:

Intent intent = new Intent(getApplicationContext(), Activity2.class);
startActivity(intent);

Activity2在操作栏中有一个BACK按钮,如下所示:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

现在,假设我在主要活动上选择第3项并按下按钮。活动2打开了。现在,当我按下操作栏中的“返回”按钮时,主要活动会打开,但项目3不会保留在微调器中。微调器包含第1项。

当我调试时,我发现当按下活动2的BACK按钮时,会调用onCreate主要活动方法。这意味着我的主要活动就是被杀死。

问题:如何在主要活动中保留微调器中的第3项?

3 个答案:

答案 0 :(得分:4)

根据 @PavneetSingh 评论,我为launchMode文件中的MainActivity设置singleTopAndroidManifest.xml,如下所示:

<activity android:name=".MainActivity"
        android:launchMode="singleTop">
</activity>

有效。现在,当我在微调器中选择任何值时,按下按钮并移动到下一个活动,按该活动中的后退按钮再次进入主活动,保留微调器的值。这就是我所需要的。

答案 1 :(得分:0)

您可以使用捆绑包将值从一个活动传递到另一个活动:

Intent intent = new Intent(context, YourActivity.class);
intent.putExtra(KEY, <your value here>);
startActivity(intent);

然后是您的其他活动

Intent intent = getIntent();
if (null != intent) { //Null Checking
  String StrData= intent.getStringExtra(KEY);
  int NoOfData = intent.getIntExtra(KEY, defaultValue);
  boolean booleanData = intent.getBooleanExtra(KEY, defaultValue);
  char charData = intent.getCharExtra(KEY, defaultValue); 
}

修改

如果您希望在“返回”时保留值,您应该做的是在不完成当前活动的情况下启动活动。这会将新活动添加到堆栈中。让我们以有序的方式看待这一点:

  1. 您的微调器位于Activity1
  2. 用户为微调器设置信息。您启动Activity2 而不完成Activity1
  3. 用户在Activity2中执行某些操作;然后单击按钮,触发返回Activity1。要返回Activity1,您应该只在Activity2中finishActivity()。这会将Activity1及其状态带回屏幕。
  4. 由于您使用的是DisplayHomeAsEnabled,因此在结束活动时您的代码应如下所示:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
           finish();
        }
    
        return super.onOptionsItemSelected(item);
    }
    

答案 2 :(得分:0)

您可以在onSaveInstanceState(Bundle)onRestoreInstanceState(Bundle)onCreate(Bundle)中保存和恢复您的实例。 Android通常会销毁您之前的Activity以节省资源,但提供这些回调以保存重要数据以在需要时恢复状态。 您可以在https://developer.android.com/guide/components/activities/activity-lifecycle.html找到更多信息 在&#34;生命周期回调&#34;部分下。