【问题标题】:Add only one instance of fragment into backstack仅将一个片段实例添加到后台堆栈中
【发布时间】:2017-02-06 10:37:29
【问题描述】:

我已经在我的应用程序中实现了片段。这是我在 fragment_container 中切换片段的代码。

 private void switchFragment(Fragment fragment, boolean isAddToBackStack, String tag)
{
    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();

    ft.replace(R.id.container, fragment, tag);
    if (isAddToBackStack)
        ft.addToBackStack(tag);
    setCurrentTopFragment(Integer.parseInt(tag));
    ft.commit();
}

我有 4 个片段 A、B、C 和 D,为了在这些片段之间切换,我使用了上述方法。我的后备箱中有 A、C、B。如果我再次切换到 Fragmnet A,我的 backstack 就像 A,C,B,A。我真正想要的是如果我再次切换到 A,我想要像 C、B、A 这样的 backstack 序列。表示从 backstack 中删除旧实例并添加新实例。

【问题讨论】:

    标签: android android-fragments fragment back-stack


    【解决方案1】:

    首先通过你需要删除的 id 获取 back-stacked Fragment

    Fragment fragment = getSupportFragmentManager().getFragment(new Bundle(), TAG_KEY)
    

    或者有几种方法getBackStackEntryCount()getBackStackEntryAt。获得您需要删除的片段后。将其从片段返回堆栈中移除。

    FragmentManager manager = getActivity().getSupportFragmentManager();    
    FragmentTransaction trans = manager.beginTransaction();
    trans.remove(fragment);
    

    然后你可以添加一个新的片段 Done :)

    【讨论】:

    • trans.remove(fragment) 没有从后台删除片段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多