如何从TabLayout&中删除Tab及其相关片段FragmentStatePagerAdapter

时间:2016-06-11 16:23:54

标签: android android-tablayout fragmentstatepageradapter

我正在尝试使用TabLayout创建一个程序和一个选项菜单,选中此选项后可以添加或删除该选项卡以及该片段。我可以删除选项卡,但我无法理解还有什么需要做,因为我必须删除选项卡所包含的片段,更多的我可能还需要重新排列片段的位置,我只是可以'似乎弄清楚了。你能帮帮我吗?

在mainAcitivity下,这就是我添加标签的方式

tabLayout = (TabLayout) findViewById(R.id.tab_layout);

        tab1= tabLayout.newTab().setText("TAB 1");
        tabLayout.addTab(tab1);

        tab2 = tabLayout.newTab().setText("TAB 2");
        tabLayout.addTab(tabKantipur);

这是FragmentstatePagerAdapter

public class TabPagerAdapter extends FragmentStatePagerAdapter {

    int tabCount;

    public TabPagerAdapter(FragmentManager fm, int numberOfTabs) {
        super(fm);
        this.tabCount = numberOfTabs;
    }

    @Override
    public int getItemPosition(Object object) {
        return super.getItemPosition(object);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
              return NewsFragment.newInstance("data for fragment 1");
            case 1:
               return NewsFragment.newInstance("data for fragment 2");
            default:
                return null;
        }

    }

    @Override
    public int getCount() {
        return tabCount;
    }
}

基本上,NewsFragment是在实例中使用新实例的片段。在onActivityResult下,我从选项菜单中获取已请求的数据,以添加或删除fragmetns

 mpagerAdapter = new TabPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
removedTab = ..data received from ooption menu
// here I want to remove the Tab & the fragments (tab1 & its fragment)


if (removeTab == "tab1") {
  tabLayout.removeTab(tab1);
  mpagerAdapter.notifyDataSetChanged();
}

}

当我这样做时,只有第一个标签被删除我想知道如何删除相关的片段。

2 个答案:

答案 0 :(得分:0)

您不必明确删除该片段,您可以删除该片段。

您可以删除该选项卡并在viewPagerAdapter实例上执行notifyDataSetChanged。它将负责删除该片段。

答案 1 :(得分:0)

我曾使用fragmentarray向我提出了类似的问题。这是链接Issue: Logic to find the position of a fragment in a fragment arraylist?