ActionBar“向上”button破坏父级活动,“返回”不会
我有一个相对简单的Android应用程序,一个Activity
显示项目列表,另一个显示选定项目的详细信息。 我开始列表活动,这是我最重要的活动(使用FLAG_ACTIVITY_CLEAR_TOP
来清除从中调用它的login活动):
Intent intent = new Intent(this, ListInstancesActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish();
并从该活动内我采取行动select一个项目:
Intent detailIntent = new Intent(this, ShowInstanceActivity.class); detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id); startActivity(detailIntent);
所有的工作正常,如果我使用软键“返回”button,然后我回到我所期望的ListInstancesActivity
。 但是,如果我按下操作栏上的上/下button,则会销毁并重新创buildListInstancesActivity
。 这很糟糕,因为这样做在计算上相对昂贵。
如何使操作栏的行为与软键相同,只需返回到上一个活动而不是销毁它。
应该指出,我正在使用操作栏的支持库版本。
我的AndroidManifest.xml
的相关部分是
<activity android:name=".agenda.ListInstancesActivity" android:label="@string/list_instances_activity_title"> </activity> <activity android:name=".agenda.ShowInstanceActivity" android:label="@string/show_instance_activity_title" android:parentActivityName=".agenda.ListInstancesActivity"> </activity>
您可以覆盖操作栏向上button应该执行的操作:
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); }
并重新创build后退button效果。
在android manifest.xml中为父活动标记添加以下属性对我有用。
android:launchMode="singleTop"
参考: http : //developer.android.com/guide/topics/manifest/activity-element.html
请参阅类似的问题: 我如何正确返回父活动?
当您在清单中指定父活动时,当您单击操作栏中的“导航”button时,它将重新启动。
检查我已经回答了这个问题
https://stackoverflow.com/a/32401235/3479012
你需要通过访问onOptionsItemSelected中的android.R.id.home来覆盖actionbar中的nevigationbutton,并完成顶级的活动。
看起来您的父级活动在您的清单中没有正确设置。 在你的ShowInstanceActivity活动标签中join这个:
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" />
所以,你最后的活动标签应该是这样的:
<activity android:name=".agenda.ShowInstanceActivity" android:label="@string/show_instance_activity_title" android:parentActivityName=".agenda.ListInstancesActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".agenda.ListInstancesActivity" /> </activity>