PagerSlidingTabStrip - 在运行时添加新选项卡

时间:2015-10-15 11:15:31

标签: android tabs android-viewpager pagerslidingtabstrip

我使用PagerSlidingTabStrip显示3个标签,每个标签都包含列表视图。

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

这是一个关于如何做到这一点的例子,不要说这是最好的方式,但是我匆匆写了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));
        }
    });