动态修改TabLayout标题

这里写图片描述
在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的标题进行动态修改的操作了,如果错误欢迎指出。

猜你喜欢

转载自blog.csdn.net/weixin_37185329/article/details/78044671