实现效果
实现原理
-
step1:根据需要写出4个item布局文件,在Adapter里设置4个常量用于getItemViewType()区分item 传递给onCreateViewHolder()加载不同item布局。
-
step2:创建Adapter文件具体实现看以下代码
public class MyRecycleViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final Context context;
//布局标识集合
private final List<Integer> typeList;
//设置常量
private static final int TYPE_THREE = 3;
private static final int TYPE_TWO = 2;
private static final int TYPE_ONE = 1;
private static final int TYPE_FOUR = 4;
public MyRecycleViewAdapter(Context context, List<Integer> typeList) {
this.context = context;
this.typeList = typeList;
}
@Override
public int getItemViewType(int position) {
if (typeList.get(position) == 1) {
return TYPE_THREE;
} else if (typeList.get(position) == 0) {
return TYPE_TWO;
} else if (typeList.get(position) == 2) {
return TYPE_ONE;
} else if (typeList.get(position) == 3) {
return TYPE_FOUR;
}
return 1;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == TYPE_THREE) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item3, parent, false);
ThreeViewHolder threeViewHolder = new ThreeViewHolder(view);
return threeViewHolder;
} else if (viewType == TYPE_TWO) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, parent, false);
TwoViewHolder recyclerViewHolder = new TwoViewHolder(view);
return recyclerViewHolder;
} else if (viewType == TYPE_ONE) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1, parent, false);
OneViewHolder recycleViewHolderOne = new OneViewHolder(view);
return recycleViewHolderOne;
} else if (viewType == TYPE_FOUR) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item4, parent, false);
FourViewHolder recycleViewHolderFour = new FourViewHolder(view);
return recycleViewHolderFour;
}
return null;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case TYPE_ONE:
break;
case TYPE_TWO:
TwoViewHolder twoViewHolder = (TwoViewHolder) holder;
twoViewHolder.banner.setAdapter(new ImageAdapter(DataBean.getTestData3(),context));
twoViewHolder.banner.setIndicator(new CircleIndicator(context));
twoViewHolder. banner.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(Object data, int position) {
Toast.makeText(context, "点击" + position, Toast.LENGTH_SHORT).show();
context.startActivity(new Intent(context, Main2Activity.class));
}
@Override
public void onBannerChanged(int position) {
}
});
twoViewHolder.banner.setIndicatorGravity(IndicatorConfig.Direction.CENTER);
twoViewHolder.banner.setOrientation(Banner.VERTICAL);
twoViewHolder.banner.start();
break;
case TYPE_THREE:
ThreeViewHolder threeViewHolder = (ThreeViewHolder) holder;
Videoadapter videoadapter=new Videoadapter(context);
StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);
threeViewHolder.rv_3.setLayoutManager(staggeredGridLayoutManager);
threeViewHolder.rv_3.setAdapter(videoadapter);
break;
case TYPE_FOUR:
List<SwipeCardBean> mDatas = SwipeCardBean.initDatas();
FourViewHolder fourViewHolder = (FourViewHolder) holder;
fourViewHolder.recyclerView.setLayoutManager(new OverLayCardLayoutManager());
Myadapter myadapter=new Myadapter( mDatas,context);
fourViewHolder.recyclerView.setAdapter(myadapter);
CardConfig.initConfig(context);
ItemTouchHelper.Callback callback = new RenRenCallback(fourViewHolder.recyclerView, myadapter, mDatas);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callback);
itemTouchHelper.attachToRecyclerView(fourViewHolder.recyclerView);
break;
}
}
@Override
public int getItemCount() {
return typeList.size();
}
public class ThreeViewHolder extends RecyclerView.ViewHolder {
RecyclerView rv_3;
public ThreeViewHolder(View itemView) {
super(itemView);
rv_3=itemView.findViewById(R.id.rv_3);
}
}
public class TwoViewHolder extends RecyclerView.ViewHolder {
public Banner banner;
public TwoViewHolder(View itemView) {
super(itemView);
banner=itemView.findViewById(R.id.banner);
}
}
public class OneViewHolder extends RecyclerView.ViewHolder {
public OneViewHolder(View itemView) {
super(itemView);
}
}
public class FourViewHolder extends RecyclerView.ViewHolder {
RecyclerView recyclerView;
public FourViewHolder(View itemView) {
super(itemView);
recyclerView=itemView.findViewById(R.id.rv_1);
}
}
}
- step3:在activity中使用recyclerview
MyRecycleViewAdapter adapter = new MyRecycleViewAdapter(this, typeList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
recyclerView.setAdapter(adapter);
initParam();
adapter.notifyDataSetChanged();