RecyclerView加载不同布局

  • Post author:
  • Post category:其他


略略略略~~~..时隔N久..又回来写一篇文章,来记录自己这段时间所做的一些事情…

RecyclerView加载不同布局已经在网上一搜一大把了…为啥我还要在写..不为啥..就因为太久没有使用过RecyclerViewle ..以至于在项目中竟然写Adapter的时候卡壳了…太可怕了…所以来热热手..


  • 使用RecyclerView,首先添加依赖:

    compile 'com.android.support:recyclerview-v7:23.0.+'

  • Activity 的布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="www.fl.com.recyclerviewtest.MainActivity">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="@color/green_title"
            android:gravity="center"
            android:text="RecyclerView显示不同的item" />
    
        <com.jcodecraeer.xrecyclerview.XRecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    
    </LinearLayout>

  • Activity中的代码

    public class MainActivity extends AppCompatActivity {
    
        private RecyclerView tRecyclerView;
    
        private List<Integer> typeList=new ArrayList<>();
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initParam();
            initView();
        }
    
        private void initParam() {
            typeList.add(2);
            typeList.add(3);
            typeList.add(3);
            typeList.add(1);
            typeList.add(4);
        }
    
        private void initView() {
            tRecyclerView= (RecyclerView) findViewById(R.id.recyclerview);
            TopRecyclerViewAdapter adapter = new TopRecyclerViewAdapter(this, typeList);
            tRecyclerView.setLayoutManager(new LinearLayoutManager(this));
            tRecyclerView.setAdapter(adapter);
        }
    }
  • Adapter 代码

    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;
        private static final int TYPE_IMG_RECYCLER = 3;
        private static final int TYPE_IMG_RECYCLER_ONE = 1;
        private static final int TYPE_IMG_RECYCLER_FOUR = 4;
    
        public TopRecyclerViewAdapter(Context context, List<Integer> typeList) {
            this.context = context;
            this.typeList = typeList;
        }
    
        /**
         * 根据不同的position,设置不同的ViewType
         * position表示当前是第几个Item,通过position拿到当前的Item对象,然后判断这个item对象需要那种视图
         */
        @Override
        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 if (typeList.get(position) == 1) {
                return TYPE_IMG_RECYCLER_ONE;
            } else if (typeList.get(position) == 4) {
                return TYPE_IMG_RECYCLER_FOUR;
            }
            return 0;
        }
    
        //重写onCreateViewHolder方法,返回一个自定义的ViewHolder(当RecyclerView需要一个ViewHolder时会回调该方法,如果有可复用的View不会回调)
        @Override
        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;
            } else if (viewType == TYPE_IMG_RECYCLER_ONE) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview_one, parent, false);
                RecycleViewHolderOne recycleViewHolderOne = new RecycleViewHolderOne(view);
                return recycleViewHolderOne;
            } else if (viewType == TYPE_IMG_RECYCLER_FOUR) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview_four, parent, false);
                RecycleViewHolderFour recycleViewHolderFour = new RecycleViewHolderFour(view);
                return recycleViewHolderFour;
            }
            return null;
        }
    
        //填充onCreateViewHolder方法返回的holder中的控件(当一个View需要出现在屏幕上时,该方法会被回调,我们需要再该方法中根据数据来更改视图)
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (holder instanceof ThreeViewHolder) {
                setFloorTwo((ThreeViewHolder) holder, position);
            } else if (holder instanceof RecyclerViewHolder) {
                setFloorThree((RecyclerViewHolder) holder);
            } else if (holder instanceof RecycleViewHolderOne) {
                setOnePic((RecycleViewHolderOne) holder);
            } else if (holder instanceof RecycleViewHolderFour) {
                setFourPic((RecycleViewHolderFour) holder);
            }
        }
    
    
        //获取数据的数量(告诉RecyclerView有多少个视图需要显示)
        @Override
        public int getItemCount() {
            return typeList.size();
        }
    
        private void setFourPic(RecycleViewHolderFour holder) {
    
            holder.iv_one.setImageResource(R.color.colorAccent);
            holder.iv_two.setImageResource(R.color.colorPrimary);
    
        }
    
        private void setOnePic(RecycleViewHolderOne holderOne) {
            holderOne.imageView.setImageResource(R.color.colorPrimary);
    
        }
    
        //设置二楼数据(显示3张图片)
        private void setFloorTwo(ThreeViewHolder holder, int position) {
            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);
            }
        }
    
    
        public class RecycleViewHolderOne extends RecyclerView.ViewHolder {
    
            ImageView imageView;
    
            public RecycleViewHolderOne(View itemView) {
                super(itemView);
                imageView = (ImageView) itemView.findViewById(R.id.iv_show_one);
            }
        }
    
        public class RecycleViewHolderFour extends RecyclerView.ViewHolder {
            ImageView iv_one, iv_two;
    
            public RecycleViewHolderFour(View itemView) {
                super(itemView);
                iv_one = (ImageView) itemView.findViewById(R.id.iv_one);
                iv_two = (ImageView) itemView.findViewById(R.id.iv_two);
            }
        }
    }

  • 横向的RecyclerView 的Adapter

    public class HRecyclerViewAdapter extends RecyclerView.Adapter<HRecyclerViewAdapter.HImageHolder>{
    
        private final Context context;
        private OnItemClickListener onItemClickListener;
    
        public HRecyclerViewAdapter(Context context) {
            this.context=context;
        }
    
        @Override
        public HImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(context).inflate(R.layout.item_hrecyclerview_recyclerview_home, parent, false);
            HImageHolder hImageHolder = new HImageHolder(view);
            return hImageHolder;
        }
    
        @Override
        public void onBindViewHolder(final HImageHolder holder, int position) {
    
    
            if (onItemClickListener!=null){
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onItemClickListener.onItemClick(holder.getLayoutPosition());
                    }
                });
            }
    
        }
    
        @Override
        public int getItemCount() {
            return 10;
        }
    
        public class HImageHolder extends RecyclerView.ViewHolder{
    
            public ImageView imageView;
            // 折扣 名字 价格
            public TextView tvDiscount,tvName,tvPrice;
    
            public HImageHolder(View itemView) {
                super(itemView);
                imageView= (ImageView) itemView.findViewById(R.id.imageview);
                tvDiscount= (TextView) itemView.findViewById(R.id.tv_discount);
                tvName= (TextView) itemView.findViewById(R.id.tv_name);
                tvPrice= (TextView) itemView.findViewById(R.id.tv_price);
            }
        }
    
        public void setOnItemClickListener(OnItemClickListener onItemClickListener){
            this.onItemClickListener=onItemClickListener;
        }
    
        public interface OnItemClickListener{
            void onItemClick(int position);
        }
    
    }
Xml布局我就不贴了.感兴趣的同学可以你下载demo看看..很简单…我只是为了练练手..我个人觉得代码这东西就是得经常敲…一段时间不敲就会感觉手生..最后 祝大家周末愉快~~~~~~~~~我明天还要上班…..
Demo下载戳这里——>

点击打开链接



版权声明:本文为u011011744原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。