在 Activity App Bar 上按下返回到父级 activity 以及它被调用的片段

On Activity App Bar back pressed go to the parent activity with the fragment it was called

我遇到了其他社区成员可能遇到的问题,我想问问是否有人知道解决方案。我有一个包含这两个活动的应用程序 (MainActivity、UserProfileActivity)。

MainActivity 包含一个在片段中导航的 NavigationDrawer。所以这就是问题所在。在第二个片段中导航并按下该片段中的按钮时。它打开 UserProfileActivity(MainActivity 的子项),其中包含作为子项生成的应用栏。当您按下这个新 Activity 的后退按钮时,它应该返回到我们调用这个新 Activity 时所在片段中的 MainActivity(父级)。但不是,它返回到 MainActivity 但加载了 home 片段。不是我们之前调用的那个。

有人知道如何解决这个问题吗?这里我留下了我从片段中做的意图的代码:

Intent intent = new Intent(context, UserProfileActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("userId", message.getUserId());
            intent.putExtras(bundle);
            context.startActivity(intent);

此行为背后的原因:

如果您在 manifest.xml 中设置 android:parentActivityName 的值,默认情况下每次按下导航按钮都会创建一个父 activity 的新实例,而不是从中弹出它activity backstack,所以你看到了 home 片段。

解决方法

首先,从 manifest.xml 中删除 android:parentActivityName。在您的 ChildActivity 的 onCreate 方法中,如果您还没有,请输入 getSupportActionBar().setDisplayHomeAsUpEnabled(true)。然后覆盖您的 ChildActivity 的 onSupportNavigateUp(),并放置 finish().

ChildActivity.java:

public class ChildActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        getSupportActionBar().setDisplayHomeAsUpEnabled(true)
        ...
    }

    @Override
    public boolean onSupportNavigateUp() {
        finish();
        return super().onSupportNavigateUp();
    }
}