SherlockFragmentActivity中ViewPager的单个选项卡上的片段事务

时间:2013-11-25 07:06:56

标签: android android-fragments actionbarsherlock

我正在ViewPager中创建SherlockFragmentActivity。 我的应用程序的结构类似于ViewPager - >有三个标签:tab1,tab2,tab3。 在tab2中,我想显示不同的片段,如fragment1-> fragment2-> fragment3。 在ViewPager中,我使用Fragment添加了三个标签(FragmentStatePageAdapter s),如下所示。

public Fragment getItem(int arg0) {
    switch (arg0) {
        case 0:
            SearchTab searchtab = new Tab1();
            return tab1;
        case 1:
            BrowseTab browsetab = new Tab2();
            return tab2;
        case 2:
            SavedItemsTab savedTab = new Tab3();
            return Tab3;
    }
    return null;
}

现在在tab2中,我在fragment1中显示了ListView。当用户点击ListView中的项目时,我想显示另一个片段(fragment2)与其他ListView。我正在通过片段事务执行此操作:

Fragment newFragment = new Brxxxx_Fragment();

Bundle args = new Bundle();
args.putString("Main_Cat_ID", Main_Category_ID_Str);
args.putString("Main_Cat_Name", Main_Category_Name_Str);

newFragment.setArguments(args);

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.b_p_layoutid, newFragment);
transaction.addToBackStack(null);
transaction.commit();

在这一步之后,我能够显示另一个片段(fragment2),但我的旧片段(fragment1)仍然可以在新片段下面看到。

如果我想在不使用replace()的情况下删除以前的片段,我应该如何将当前片段传递给remove方法?

1 个答案:

答案 0 :(得分:1)

如果您不需要向后导航或将背景颜色设置为新片段,也许可以删除其他片段。你可以检查你的布局ID'R.id.b_p_layoutid'是你的'FrameLayout'而不是你的'Fragment'id以防万一...

android:background="?android:attr/colorBackground"

getActivity().getSupportFragmentManager().beginTransaction().remove('YOUR_FRAGMENT').commit();

您也可以查看此答案:

访问Android replace fragment still displays some of the replaced fragment

访问Fragment replaced still visible on background