我有一个主要活动,其中有一个微调器和一个按钮。微调器包含四个项目:项目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项?
答案 0 :(得分:4)
根据 @PavneetSingh 评论,我为launchMode
文件中的MainActivity设置singleTop
为AndroidManifest.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);
}
修改强>:
如果您希望在“返回”时保留值,您应该做的是在不完成当前活动的情况下启动活动。这会将新活动添加到堆栈中。让我们以有序的方式看待这一点:
finishActivity()
。这会将Activity1及其状态带回屏幕。由于您使用的是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;部分下。