//———————————-先上效果图
//要实现这样的一个效果,有两种实现方法,多布局和单布局。
//这个效果注意的问题有滑动冲突,和fragment滑动空白问题
//1.—————————先说第一种多布局—————-重点都在适配器,直接看适配器
public class Apader extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
//定义三个int类型 用来判断布局
private int a = 1, b = 2, c = 3;
private List<String> mList;
private Context context;
public Apader(List<String> mList, Context context) {
this.mList = mList;
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//holder为空,通过判断viewType,给holder赋值,最后统一返回一个holder
RecyclerView.ViewHolder holder = null;
switch (viewType) {
case 1:
View inflate = LayoutInflater.from(context).inflate(R.layout.item1, null);
holder = new ViewHolder1(inflate);
break;
case 2:
View inflate2 = LayoutInflater.from(context).inflate(R.layout.item2, null);
holder = new ViewHolder2(inflate2);
break;
case 3:
View inflate3 = LayoutInflater.from(context).inflate(R.layout.item3, null);
holder=new ViewHolder3(inflate3);
break;
}
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//比较holder 是否 是ViewHolder1
if (holder instanceof ViewHolder1){
((ViewHolder1) holder).mText1.setText("初一");
List<String> mList1=new ArrayList<>();
List<Fragment>mFragmentList1=new ArrayList<>();
AFragment aFragment = new AFragment();
for (int i = 1; i < 7; i++) {
mList1.add(i+"班");
mFragmentList1.add(AFragment.newInstance("",""));
}
//---------这个setOffscreenPageLimit()方法是预加载的意思,为了防止fragment滑动的时候变空白
((ViewHolder1) holder).mViewPager1.setOffscreenPageLimit(mList1.size());
ViewPagerApader viewPagerApader = new ViewPagerApader(((MainActivity)(context)).getSupportFragmentManager(),mList1,mFragmentList1);
((ViewHolder1) holder).mViewPager1.setAdapter(viewPagerApader);
((ViewHolder1) holder).mTab1.setupWithViewPager(((ViewHolder1) holder).mViewPager1);
}
//比较holder 是否 是ViewHolder2
if (holder instanceof ViewHolder2){
((ViewHolder2) holder).mText2.setText("初二");
List<String> mList2=new ArrayList<>();
List<Fragment>mFragmentList2=new ArrayList<>();
AFragment aFragment = new AFragment();
for (int i = 1; i < 7; i++) {
mList2.add(i+"班");
mFragmentList2.add(AFragment.newInstance("",""));
}
//---------这个setOffscreenPageLimit()方法是预加载的意思,为了防止fragment滑动的时候变空白
((ViewHolder2) holder).mViewPager2.setOffscreenPageLimit(mList2.size());
ViewPagerApader viewPagerApader = new ViewPagerApader(((MainActivity)(context)).getSupportFragmentManager(),mList2,mFragmentList2);
((ViewHolder2) holder).mViewPager2.setAdapter(viewPagerApader);
((ViewHolder2) holder).mTab2.setupWithViewPager(((ViewHolder2) holder).mViewPager2);
}
//比较holder 是否 是ViewHolder3
if (holder instanceof ViewHolder3){
((ViewHolder3) holder).mText3.setText("初三");
List<String> mList3=new ArrayList<>();
List<Fragment>mFragmentList3=new ArrayList<>();
AFragment aFragment = new AFragment();
for (int i = 1; i < 7; i++) {
mList3.add(i+"班");
mFragmentList3.add(AFragment.newInstance("",""));
}
//---------这个setOffscreenPageLimit()方法是预加载的意思,为了防止fragment滑动的时候变空白
((ViewHolder3) holder).mViewPager3.setOffscreenPageLimit(mList3.size());
ViewPagerApader viewPagerApader = new ViewPagerApader(((MainActivity)(context)).getSupportFragmentManager(),mList3,mFragmentList3);
((ViewHolder3) holder).mViewPager3.setAdapter(viewPagerApader);
((ViewHolder3) holder).mTab3.setupWithViewPager(((ViewHolder3) holder).mViewPager3);
}
}
//如果RecyclerView的下标是第一个也就是0,的话返回a布局
//如果RecyclerView的下标是第一个也就是1,的话返回b布局
//最后如果RecyclerView的下标是第一个也就是3,的话返回c布局
@Override
public int getItemViewType(int position) {
if (position==0){
return a;
}
if (position==1){
return b;
}
return c;
}
@Override
public int getItemCount() {
return mList.size();
}
public static class ViewHolder1 extends RecyclerView.ViewHolder {
public View rootView;
public TextView mText1;
public TabLayout mTab1;
public ViewPager mViewPager1;
public ViewHolder1(View rootView) {
super(rootView);
this.rootView = rootView;
this.mText1 = (TextView) rootView.findViewById(R.id.mText1);
this.mTab1 = (TabLayout) rootView.findViewById(R.id.mTab1);
this.mViewPager1 = (ViewPager) rootView.findViewById(R.id.mViewPager1);
}
}
public static class ViewHolder2 extends RecyclerView.ViewHolder {
public View rootView;
public TextView mText2;
public TabLayout mTab2;
public ViewPager mViewPager2;
public ViewHolder2(View rootView) {
super(rootView);
this.rootView = rootView;
this.mText2 = (TextView) rootView.findViewById(R.id.mText2);
this.mTab2 = (TabLayout) rootView.findViewById(R.id.mTab2);
this.mViewPager2 = (ViewPager) rootView.findViewById(R.id.mViewPager2);
}
}
public static class ViewHolder3 extends RecyclerView.ViewHolder{
public View rootView;
public TextView mText3;
public TabLayout mTab3;
public ViewPager mViewPager3;
public ViewHolder3(View rootView) {
super(rootView);
this.rootView = rootView;
this.mText3 = (TextView) rootView.findViewById(R.id.mText3);
this.mTab3 = (TabLayout) rootView.findViewById(R.id.mTab3);
this.mViewPager3 = (ViewPager) rootView.findViewById(R.id.mViewPager3);
}
}
}
//—————-这种多布局其实实现这种效果很简单,写三个布局文件,就实现了
//————————这第二种 单布局,其实我感觉单布局比多布局简单,因为只用一个布局文件,不过得注意一个ViewPager的创建问题。
//2.————————–第二种 单布局————————————-
public class Apader extends RecyclerView.Adapter<Apader.ViewHolder> {
private List<String> mList;
private Context context;
public Apader(List<String> mList, Context context) {
this.mList = mList;
this.context = context;
}
private List<String> mList2;
private List<Fragment>mFragmentList;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item, null);
ViewHolder holder=new ViewHolder(inflate);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
//---------重点在这里 holder.mViewPager.setId(position+1);这句是创建多个ViewPager
//如果不加这句的话,就只能创建出一个ViewPager的布局,其他两个ViewPager是空的,当然也就滑不动了
holder.mViewPager.setId(position+1);
holder.mChuYi.setText(mList.get(position));
mList2=new ArrayList<>();
mFragmentList=new ArrayList<>();
mList2.add("1班");
mList2.add("2班");
mList2.add("3班");
mList2.add("4班");
mList2.add("5班");
mList2.add("6班");
//fragment的复用
AFragment aFragment = new AFragment();
for (int i = 0; i < mList2.size(); i++) {
mFragmentList.add(AFragment.newInstance("",""));
}
//Viewpager适配器
ViewPagerApader viewPagerApader = new ViewPagerApader(((MainActivity)(context)).getSupportFragmentManager(),mList2,mFragmentList);
holder.mViewPager.setOffscreenPageLimit(mFragmentList.size());
holder.mViewPager.setAdapter(viewPagerApader);
holder.mTab.setupWithViewPager(holder.mViewPager);
}
@Override
public int getItemCount() {
return mList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
public View rootView;
public ViewPager mViewPager;
public TextView mChuYi;
public TabLayout mTab;
public ViewHolder(View rootView) {
super(rootView);
this.rootView = rootView;
this.mTab = rootView.findViewById(R.id.mTab);
this.mViewPager = (ViewPager) rootView.findViewById(R.id.mViewPager);
this.mChuYi = (TextView) rootView.findViewById(R.id.mChuYi);
}
}
}
//———————————————注意—————————————-
//我写的都是RecyclerView适配器,再写适配器里面的数据(也就是页面数据)的时候不可用ListView,最好还用RecyclerView适配
//不然的话就会有滑动冲突,而RecyclerView不会有,因为人家RecyclerView内部已经解决。
//反正最好都用同一种适配器,谨记谨记!
//————————————完————————————————–
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118370.html