0

我有下一个代码在容器 [Main, A, B, C] 中的 4 个片段之间切换。

无论用户如何浏览片段,我都需要返回按钮才能返回[Main] 。例如,如果我在按返回时转到[Main] >> [A] >> [C]应该转到[Main]

但我没有得到想要的结果。我认为我在片段之间的 coparisson 方面做得不好。

Launcher MainFragment = new Launcher();

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment == MainFragment){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment == MainFragment && pFragment != MainFragment){
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        //Fragment fr = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
    currentFragment = pFragment;
}

更新 -

我已经看到这种方式效果更好,但仍然存在问题。如果我浏览一些片段而不返回主片段,当我按下它时它不会返回。就像 popbackstack() 有问题一样。

public void switchFragment(Fragment pFragment) {
    FragmentManager fm = getSupportFragmentManager();
    Fragment currentFragment = fm.findFragmentById(R.id.fragment_container);

    if (pFragment.equals(MainFragment)){
        getSupportFragmentManager().beginTransaction()
        .add(R.id.fragment_container, pFragment).commit();
    }
    else if (currentFragment.equals(MainFragment) && !pFragment.equals(MainFragment)){
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).addToBackStack(null).commit();
    }
    else {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_container, pFragment).commit();
    }
}
4

2 回答 2

0

此功能可以通过从片段事务中删除 .addToBackStack 来实现。

以下是片段中回栈功能的 Android 参考:http: //developer.android.com/training/implementing-navigation/temporal.html#back-fragments

于 2013-11-13T14:48:34.530 回答
0

我终于得到了想要的结果,只需在 back_key onClickListener 上替换我想要的片段:

final OnClickListener goBack = new OnClickListener() {
    @Override
    public void onClick(View v) {
        getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_container, MainFragment).commit();
    }
};

这样,如果将来我需要返回另一个片段而不是主片段,我只需添加一个条件来比较片段标签并根据标签做一些事情。

于 2013-11-14T14:00:10.040 回答