小编典典

如何正确返回父活动?

all

我的 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);
}

阅读 63

收藏
2022-07-30

共1个答案

小编典典

launchMode您在 Android 清单中使用标准声明了活动
A。根据文档,这意味着以下内容:

系统总是在目标任务中创建一个新的活动实例并将意图路由到它。

onCreate因此,即使正确处理了任务堆栈,系统也被迫重新创建活动A(即调用)。

要解决此问题,您需要更改清单,将以下属性添加到 A 活动声明:

android:launchMode="singleTop"

注意: 只有* 当您 完全确定 要终止的活动 B 实例位于活动 A
的实例之上时,调用finish()(如之前的解决方案所建议的那样)才有效。在更复杂的工作流中(例如,从通知启动活动 B)情况可能并非如此,您必须从 B
正确启动活动 A。
* __

2022-07-30