从另一个活动返回到上一个片段

问题描述 投票:0回答:3

我有一个简单的问题。我的问题是我有两个活动:

  • 活动A.
  • 活动B.

在活动A中,我显示4-5个片段。这是主要活动(导航抽屉)所以我在其中显示4-5个片段。

从所有片段重定向到活动B.

但是当我从活动B回来时,我想显示最后打开的片段。

现在它直接打开第一个片段,这是默认的。我想在用户返回第一个活动时打开最后打开的片段。

请帮我...

android android-fragments android-activity back-stack fragment-backstack
3个回答
0
投票

您可以在活动A中使用onSaveInstanceState来保存有关上次打开的片段和onRestoreInstanceState / onCreate的信息以恢复此信息。例如:

private static final String LAST_OPENED_FRAGMENT_REF = "LAST_OPENED_FRAGMENT_REF";
private static final int HOME_FRAGMENT = 0;
private static final int OTHER_FRAGMENT = 1;

private int currentOpenedFragment = HOME_FRAGMENT;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    if (savedInstanceState != null) {
        currentOpenedFragment = savedInstanceState.getInt(LAST_OPENED_FRAGMENT_REF);
    }
    if (navigationView != null) {
        Fragment fragment = initFragmentByType(currentOpenedFragment);
        getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.fragment_container, fragment)
            .commit();
        setupDrawerContent(navigationView);
    }
    ...
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(LAST_OPENED_FRAGMENT_REF, currentOpenedFragment);
}

private Fragment initFragmentByType(int type) {
    switch(type) {
        case HOME_FRAGMENT: return new Home();
        case OTHER_FRAGMENT: return new Other();
        default: throw new IllegalArgumentException("There is no type: " + type);
    }
}

并且不要忘记在currentOpenedFragment回调中更新onNavigationItemSelected字段。


0
投票

如果您的第一个活动随第二个活动而改变,那么前一个活动的碎片将因活动生命周期而自行销毁。

您应该使用startActivity打开第一个活动,并在它进入字母活动之前存储最后一个活动片段。


0
投票

调用第二个活动时不使用完成。对于exp:`

 Intent i = new Intent(getApplicationContext(), ActivityB.class);
 startActivity(i);
 //finish(); `
© www.soinside.com 2019 - 2024. All rights reserved.