【问题标题】:How to delete a Tab and its associated fragment from TabLayout & FragmentStatePagerAdapter如何从 TabLayout 和 FragmentStatePagerAdapter 中删除选项卡及其关联的片段
【发布时间】:2016-06-11 16:23:54
【问题描述】:

I am trying to create a program with TabLayout and an option menu which when selected can add or delete the tab along with the fragment.我可以删除选项卡,但我无法理解还需要做什么,因为我必须删除选项卡包含的片段,此外,我可能还必须重新排列我无法显示的片段的位置弄清楚。你能帮我解决这个问题吗?

在 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 下,我正在获取从选项菜单中请求的数据以添加或删除片段

 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();
}

}

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

【问题讨论】:

  • 您想在同一步骤中执行此操作吗?不确定,但您始终可以以编程方式删除 Fragment。 stackoverflow.com/questions/22474584/…
  • 另外,removeTab == "tab1" 不是您在 Java 中比较字符串的方式
  • 是的,我想在同一个步骤中进行,我花了数周时间仍然无法做到。所有教程都在讨论为片段设置标签,但如您所见,我的片段中没有标签。

标签: android android-tablayout fragmentstatepageradapter


【解决方案1】:

您不必显式删除片段,您可以删除片段。

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

【讨论】:

  • 我已经在使用它,但它不会删除片段。请检查上面的代码。 mpagerAdapter.notifyDataSetChanged();
  • 您还必须修改 tabCount 变量,然后执行 notifyDataSetChangesd()。
【解决方案2】:

我使用 fragmentarray 提出了一个类似的问题,我得到了它的工作。这是链接,Issue: Logic to find the position of a fragment in a fragment arraylist?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多