RecyclerView显示多种Item布局

    xiaoxiao2021-03-25  128

    如果大家不了解RecyclerView,请点击下面博客先进行了解:

    http://blog.csdn.net/zheng_jiao/article/details/52389707

    如果大家使用过RecyclerView,显示多个item非常简单;

    我们项目中有6个不同的布局,在这里我为了大家方便查看,我显示2个不同的布局;

    /** * Created by ZhengJiao on 2017/1/23. * 显示多个item和显示单个item的区别就是: * 1,TopRecyclerViewAdapter不再集成单个ViewHolder,而是集成RecyclerView.ViewHolder * 2,添加getItemViewType(int position)方法 * 3,创建每个item对应的ViewHolder(创建多个ViewHolder) */ public class TopRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final Context context; //布局标识集合 private final List<Integer> typeList; //设置两个常量 private static final int TYPE_IMG_THREE = 2; //2F(显示3张图片) private static final int TYPE_IMG_RECYCLER = 3; //3F(显示无数张图片) public TopRecyclerViewAdapter(Context context,List<Integer> typeList) { this.context = context; this.typeList = typeList; } /** *根据不同的position,设置不同的ViewType *position表示当前是第几个Item,通过position拿到当前的Item对象,然后判断这个item对象需要那种视图 */ public int getItemViewType(int position) { if (typeList.get(position) == 2) { return TYPE_IMG_THREE; } else if (typeList.get(position) == 3) { return TYPE_IMG_RECYCLER; }else { return 0; } } //重写onCreateViewHolder方法,返回一个自定义的ViewHolder(当RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用的View不会回调) public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_IMG_THREE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview_three, parent, false); ThreeViewHolder threeViewHolder = new ThreeViewHolder(view); return threeViewHolder; } else if (viewType == TYPE_IMG_RECYCLER) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recyclerview_hrecyclerview, parent, false); RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view); return recyclerViewHolder; } return null; } //填充onCreateViewHolder方法返回的holder中的控件(当一个View需要出现在屏幕上时,该方法会被回调,我们需要再该方法中根据数据来更改视图) public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ThreeViewHolder) { setFloorTwo((ThreeViewHolder) holder); } else if (holder instanceof RecyclerViewHolder) { setFloorThree((RecyclerViewHolder) holder); } } //获取数据的数量(告诉RecyclerView有多少个视图需要显示) public int getItemCount() { return typeList.size(); } //设置二楼数据(显示3张图片) private void setFloorTwo(ThreeViewHolder holder) { holder.tvTitle.setText("这里显示三张图片"); } //设置三楼数据(显示N张图片) private void setFloorThree(RecyclerViewHolder holder) { setHRecyclerView(holder.hRecyclerView); } private void setHRecyclerView(RecyclerView hRecyclerView) { HRecyclerViewAdapter hRecyclerViewAdapter = new HRecyclerViewAdapter(context); LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(OrientationHelper.HORIZONTAL); hRecyclerView.setLayoutManager(layoutManager); hRecyclerView.setHasFixedSize(false); hRecyclerView.setAdapter(hRecyclerViewAdapter); hRecyclerViewAdapter.setOnItemClickListener(new HRecyclerViewAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { Toast.makeText(context,"你点击了"+position+"条",Toast.LENGTH_SHORT).show(); } }); } //三张图片 public class ThreeViewHolder extends RecyclerView.ViewHolder { public TextView tvTitle; public ImageView ivOne, ivTwo, ivThree; public ThreeViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_title); ivOne = (ImageView) itemView.findViewById(R.id.iv_one); ivTwo = (ImageView) itemView.findViewById(R.id.iv_two); ivThree = (ImageView) itemView.findViewById(R.id.iv_three); } } //横向的RecyclerView public class RecyclerViewHolder extends RecyclerView.ViewHolder { public TextView tvTitle; public RecyclerView hRecyclerView; public RecyclerViewHolder(View itemView) { super(itemView); tvTitle = (TextView) itemView.findViewById(R.id.tv_title); hRecyclerView = (RecyclerView) itemView.findViewById(R.id.h_recyclerview); } } }

    在MainActivity中使用和单个item一样:

    tRecyclerView= (RecyclerView) findViewById(R.id.recyclerview); TopRecyclerViewAdapter adapter = new TopRecyclerViewAdapter(this, typeList); tRecyclerView.setLayoutManager(new LinearLayoutManager(this)); tRecyclerView.setHasFixedSize(false); tRecyclerView.setAdapter(adapter); 点击打开链接免费下载源码

    转载请注明原文地址: https://ju.6miu.com/read-8585.html

    最新回复(0)