//这是简易的tabLayout和viewpager地址
//https://blog.csdn.net/wei844067872/article/details/78351284
//我这里是viewpager和tabLayout一起使用,这里只有viewpager的完整代码
//转载https://blog.csdn.net/bailichun19901111/article/details/99670381
private RefreshViewPagerAdapter viewPagerAdapter;
/**
* 管理者对象有几种????
* getSupportFragmentManager()...activity管理他身上的fragment的时候使用
* getChildFragmentManager()...fragment嵌套的时候,,,管理孩子需要使用这个管理者
* getFragmentManager()....孩子里面还有fragment的话就使用这个
*/
ArrayList<NewsFragment> newsFragments = new ArrayList<>();
newsFragments.clear();
for (int i=0;i<type.size();i++){
NewsFragment newsFragment = new NewsFragment(HomeFragmentTab2.this, viewPager, i
, refreshlayout, refreshlayout_footer);//参数根据自己需求
newsFragments.add(newsFragment);
}
if (viewPagerAdapter!=null){
viewPagerAdapter.clear(viewPager);
}
viewPagerAdapter = new RefreshViewPagerAdapter(getChildFragmentManager()
,newsFragments,type);
viewPager.setAdapter(viewPagerAdapter);
//viewpager适配器
public class RefreshViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList<NewsFragment> mFragmentArrayList;
private List<HomeTabViewPagerBean.TypeBean> type;
private FragmentManager mFragmentManager;
private FragmentTransaction mCurTransaction;
public RefreshViewPagerAdapter(FragmentManager childFragmentManager, ArrayList<NewsFragment> newsFragments, List<HomeTabViewPagerBean.TypeBean> type) {
super(childFragmentManager);
this.mFragmentManager = childFragmentManager;
this.mFragmentArrayList = newsFragments;
this.type = type;
}
@Override
public Fragment getItem(int i) {
Bundle bundle = new Bundle();
bundle.putString("id", type.get(i).typeId + "");
bundle.putString("type_mold", type.get(i).typeMold);
mFragmentArrayList.get(i).setArguments(bundle);
return mFragmentArrayList.get(i);
}
@Override
public int getCount() {
return type.size();
}
@Override
public CharSequence getPageTitle(int position) {
return type.get(position).title;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
/**
* 清除缓存fragment
*/
public void clear(ViewGroup container){
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
for(int i=0;i<mFragmentArrayList.size();i++){
long itemId = getItemId(i);
String name = makeFragmentName(container.getId(), itemId);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if(fragment != null){//根据对应的ID,找到fragment,删除
mCurTransaction.remove(fragment);
}
}
mCurTransaction.commitNowAllowingStateLoss();
}
/**
* 等同于FragmentPagerAdapter的makeFragmentName方法,
* 由于父类的该方法是私有的,所以在此重新定义
* @param viewId
* @param id
* @return
*/
private static String makeFragmentName(int viewId, long id) {
return "android:switcher:" + viewId + ":" + id;
}
}