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