【问题标题】:PagerSlidingTabStrip - add new tab at run timePagerSlidingTabStrip - 在运行时添加新标签
【发布时间】:2016-01-13 19:48:05
【问题描述】:

我正在使用 PagerSlidingTabStrip 显示 3 个选项卡,每个选项卡都包含列表视图。

我有一个场景,我需要在运行时添加新标签,比如在滑动刷新时我需要在左端添加新标签。

下面是我添加新标签的代码:

pagerAdapter.TABS_COUNT = 4; //global value to change the tabs count
pagerAdapter.notifyDataSetChanged();
pagerSlidingTabStrip.setViewPager(mPager);

但有时其中一个选项卡内容变为空列表视图不可滚动。

我能做到这一点的最佳方法是什么?

【问题讨论】:

  • 您的寻呼机适配器可能有问题。
  • 为什么不使用片段分页器适配器 + 片段内部视图分页器,这将帮助您添加片段以在视图分页器中运行时间。
  • @user2056563 你能发布更多相关代码吗?

标签: android tabs android-viewpager pagerslidingtabstrip


【解决方案1】:

这里有一个例子说明怎么做,不要说这是最好的方法,但我写的很着急https://github.com/jacktech24/pager-sliding-strip-example

首先,您需要一个自定义适配器,这里我使用了一个简单的适配器,它只在每个片段上显示文本,但修改它以支持普通片段等很容易。示例中的 mTab​​ 是:

mTabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);

然后是例子

private class TestAdapter extends FragmentPagerAdapter {

        private ArrayList<String> tabs = new ArrayList<>();

        public TestAdapter(FragmentManager supportFragmentManager) {
            super(supportFragmentManager);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment frag = new ExampleFragment();
            Bundle bundle = new Bundle();
            bundle.putString("title", (String) getPageTitle(position));
            frag.setArguments(bundle);
            return frag;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return tabs.get(position);
        }

        @Override
        public int getCount() {
            return tabs.size();
        }

        public void addTab(String tab) {
            tabs.add(tab);
            notifyDataSetChanged();
            mTabs.notifyDataSetChanged();
        }

        public void removeTab(int position) {
            tabs.remove(position);
            notifyDataSetChanged();
            mTabs.notifyDataSetChanged();
        }

    }

那么,就这么简单:

    //mAdapter is instance of your adapter
    mAdapter.addTab("test 1");
    mAdapter.addTab("test 2");
    mAdapter.addTab("test 3");


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAdapter.addTab("test "+(mAdapter.getCount()+1));
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2018-07-03
    • 2011-01-22
    • 2019-05-17
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多