动态修改TabLayout标题

来源:互联网 发布:淘宝开店卖什么好起步 编辑:程序博客网 时间:2024/05/16 11:36

这里写图片描述
在TabLayout+ViewPager中我们可能会碰到这样的需求就是在我们的Tab页下的Fragment中完成数据的加载时要在我们的Tab标题中动态显示有多少数量,下面就是实现过程。

adapter中

public class MPagerAdapter extends FragmentPagerAdapter {    private List<Fragment> mFragmentList;    private List<String> mTitles;    public MPagerAdapter(FragmentManager fm, List<String> titles, List<Fragment> fragList) {        super(fm);        mFragmentList = fragList;        mTitles = titles;    }    @Override    public Fragment getItem(int arg0) {        return mFragmentList.size() != 0 ? mFragmentList.get(arg0) : null;    }    @Override    public int getCount() {        return mFragmentList == null ? 0 : mFragmentList.size();    }    @Override    public CharSequence getPageTitle(int position) {        return mTitles.size() != 0 ? mTitles.get(position) : "";    }    // 动态设置我们标题的方法    public void setPageTitle(int position, String title)    {        if(position >= 0 && position < mTitles.size())        {            mTitles.set(position, title);            notifyDataSetChanged();        }    }}

activity中

// 上面的三个Tab就表示我们三个Fragment// 命名在这里就随便一点,实际开发中应按照你们自己的功能来命名// 创建Adapter所需要的数据OneFrgment oneFragment = new OneFrgment();TwoFragment twoFragment = new TwoFragment();     ThreeFragment threeFragment = new ThreeFragment();List<Fragment> listFragmentData = new ArrayList<>();listFragmentData.add(oneFragment );listFragmentData.add(twoFragment );listFragmentData.add(threeFragment );List<String> titles = new ArrayList<>();titles.add(TAB1);titles.add(TAB2);titles.add(TAB3);Adapter adapter = new Adapter(getSupportFragmentManager(), titles, listFragmentData);// 我们需要把我们这个AdapterF传入到ragment中,我们就需要在我们的Fragment中写个方法,如果你们个Fragment中都需要的话,都要写相应的set方法,在这里我只写一个oneFragment.setPageAdapter(adapter);

fragment中

// onCreat方法shenglue,此处的Adapter就是我们ViewPager的Adapter,通过该Adapter去修改TabLayout标题private Adapter mAdapter;public void setPageAdapter(Adapter adapter){this.mAdapter = adapter;}//更新ViewPager的Title信息if(mAdapter != null){  for (int i=0; i<mAdapter.getCount(); i++){     if(_PageAdapter.getItem(i) == OneFragment.this){         String title =mAdapter.getPageTitle(i).toString();         // 在TabLayout的标题上添加()         int posBracket = title.indexOf("(");            if(posBracket > 0)                title = title.substring(0, posBracket);         mAdapter.setPageTitle(i, String.format(Locale.CHINESE, "%s(%s)", title, 显示的数量));             }    }}

至此,我们就完成了对TabLayout的标题进行动态修改的操作了,如果错误欢迎指出。

原创粉丝点击