安卓自定义recyclerview使用模板(两种点击事件的绑定)

说明:本文章是在学习过程中的总结文章,肯定会有错误和不足,希望大家指正。

目录

前言 一、继承RecyclerView.Adapter实现adapter 1.首先自定义一个item 2.在自定义MyAdapter中实现内部类MyViewHolder 3.继承RecyclerView.Adapter 4.我们还需要有一个更新数据的方法 5.在MainActivity中设置ReyclerView 二、点击事件的设置 1.方法一(接口方法) 2.方法二


前言

从学习使用来说Listview和RecyclerView基本都可以实现相同的功能,相比较之下Listview更容易实现。但是RecyclerView从使用上来说,增加了设置LayoutMananger可以设置线性、表格、瀑布不同的布局,并且避免了每个item绑定控件带来的资源消耗,内部也自定义一些动画效果,方便使用。但实际选择中,还是要看开发的需求。

一、继承RecyclerView.Adapter实现adapter

1.首先自定义一个item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
    android:layout_
    android:layout_
    android:layout_marginTop="10dp"
    android:background="#A4D3EE">
    <ImageView
        android:
        android:layout_
        android:layout_
        android:scaleType="fitXY"/>
    <TextView
        android:
        android:layout_
        android:layout_
        android:text="你好"
        android:textSize="22sp"
        android:gravity="center_vertical"
        />
</LinearLayout>

注意:此处的LinerLayout的layout_height要注意不要写成match_parent,不然就会出现一个item占一整个页面的尴尬情况。
在这里插入图片描述

2.在自定义MyAdapter中实现内部类MyViewHolder

    class MyViewHolder extends RecyclerView.ViewHolder{
        ImageView mIv;
        TextView mTv;
        public MyViewHolder(View itemView) {
            super(itemView);

            mIv=itemView.findViewById(R.id.iv);
            mTv=itemView.findViewById(R.id.tv);
        }
    }

说明:这里进行了item中的控件绑定。

3.继承RecyclerView.Adapter

    private List<String> dataSource;
    private Context mContext;
    private RecyclerView mRv;
    public MyReyclerViewAdapter(Context context,RecyclerView recyclerView){
        mContext=context;
        dataSource=new ArrayList<>();
        mRv=recyclerView;
    }
    /**
     * 创建实例
     */
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater= LayoutInflater.from(mContext);
        View view=inflater.inflate(R.layout.item_layout,parent,false);
        MyViewHolder myViewHolder=new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyReyclerViewAdapter.MyViewHolder holder, int position) {
        holder.mIv.setImageResource(getIcon(position));
        holder.mTv.setText(dataSource.get(position));
    }

    @Override
    public int getItemCount() {
        return dataSource.size();
    }
说明:这里重写了三个方法onCreateViewHolder在调用 mRecyclerView.setAdapter中初始化没有被初始化过的item,xml➡view➡MyViewHolder。 onBindViewHolder为每一条item填充数据。 getItemCount()获得item的长度。

4.我们还需要有一个更新数据的方法

 public void setDataSource(List<String> dataSource) {
        this.dataSource = dataSource;
        notifyDataSetChanged();
    }

说明:notifyDataSetChanged()方法可以刷新adapter

5.在MainActivity中设置ReyclerView

 //线性布局
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        //横向排列ItemView
        //linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        //数据反向展示
        linearLayoutManager.setReverseLayout(true);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mReyclerViewAdapter=new MyReyclerViewAdapter(this,mRecyclerView);
        
        mRecyclerView.setAdapter(mReyclerViewAdapter);

二、点击事件的设置

1.方法一(接口方法)

在adpter中

	private OnItemClickListener mItemClickListener;
    public void setOnclickItem(OnclickItem onclickItem) {
        this.onclickItem = onclickItem;
    }

    public interface OnclickItem{
        public void onItemClick(int position);
    }
    @Override
    public void onBindViewHolder(@NonNull @NotNull LinerAdaper.LinerViewHolder holder, int position) {
        if(onclickItem!=null){
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onclickItem.onItemClick(position);
                }
            });
        }
    }

在实例化ReyclerView activity中设置

        mAdapter.setOnclickItem(new LinerAdaper.OnclickItem() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this,"我是"+position,Toast.LENGTH_SHORT).show();
            }
        });

2.方法二

在实例化ReyclerView activity中设置addOnItemTouchListener

        mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
            @Override
            public boolean onInterceptTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
                return false;
            }

            @Override
            public void onTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {

            }

            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

            }
        });

来源url
栏目