我的 android 应用程序中有 2 个活动(A 和 B),我使用意图从活动 A 到活动 B。启用了 parent_activity 的使用:
<activity android:name=".B" android:label="B" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app_name.A" /> </activity>
我还使用了一个提供向上按钮的主题。
因此,在我调用活动 BI 之后,可以使用向上按钮返回活动 A。问题是应用程序似乎再次调用活动 A 的 onCreate() 函数,这不是我需要的行为。我需要活动 A 看起来与调用活动 B 之前的外观相同。
有没有办法做到这一点?
我没有编写任何代码来从活动 A 启动活动 B。我认为它是由 Eclipse 自动生成的。
B类看起来像:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_b, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); }
launchMode您在 Android 清单中使用标准声明了活动 A。根据文档,这意味着以下内容:
launchMode
系统总是在目标任务中创建一个新的活动实例并将意图路由到它。
onCreate因此,即使正确处理了任务堆栈,系统也被迫重新创建活动A(即调用)。
onCreate
要解决此问题,您需要更改清单,将以下属性添加到 A 活动声明:
android:launchMode="singleTop"
注意: 只有* 当您 完全确定 要终止的活动 B 实例位于活动 A 的实例之上时,调用finish()(如之前的解决方案所建议的那样)才有效。在更复杂的工作流中(例如,从通知启动活动 B)情况可能并非如此,您必须从 B 正确启动活动 A。 * __
finish()