给RecyclerView的item添加点击监听事件

来源:互联网 发布:听英语的软件 编辑:程序博客网 时间:2024/06/04 22:48

给recyclerView的item添加点击事件的监听我知道的有2种,一种是直接给item设置一个id,然后按照正常的流程在adapter里面给item添加方法setOnclickListener(),这个就不说
今天说的是给item添加回调的监听

主布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.duanlian.recyclerviewclicklistener.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler"        android:layout_width="match_parent"        android:layout_height="match_parent"        /></RelativeLayout>

item布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                android:id="@+id/item"                android:layout_width="match_parent"                android:layout_height="64dp"                android:orientation="vertical">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:paddingBottom="10dp"        android:paddingTop="10dp"        >        <TextView            android:id="@+id/tv_title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="10dp"            android:text="每日送金币"            android:textColor="#333333"            android:textSize="15sp"/>        <TextView            android:id="@+id/tv_time"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_marginRight="10dp"            android:text="每日送金币"            android:textColor="#999999"            android:textSize="13sp"/>        <TextView            android:id="@+id/tv_content"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_below="@+id/tv_title"            android:layout_marginLeft="10dp"            android:layout_marginTop="6dp"            android:text="金币为0时,送30金币,每天送两次"            android:textColor="#999999"            android:textSize="13sp"/>    </RelativeLayout></RelativeLayout>

关键是在adapter,其实我也不知道怎么说,看代码吧

package com.duanlian.recyclerviewclicklistener.adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import com.duanlian.recyclerviewclicklistener.MainActivity;import com.duanlian.recyclerviewclicklistener.R;import java.util.List;/** * RecyclerView的adapter */public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private MyItemClickListener mItemClickListener;    private Context mContext;    private List<String> mList;    public RecyclerViewAdapter(MainActivity mainActivity, List<String> list) {        this.mContext = mainActivity;        this.mList = list;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(mContext, R.layout.item_recyclerview, null);        //将全局的监听传递给holder        ViewHolder holder = new ViewHolder(view, mItemClickListener);        return holder;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        //给空间赋值    }    @Override    public int getItemCount() {        return mList.size();    }    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {        private MyItemClickListener mListener;        public ViewHolder(View itemView, MyItemClickListener myItemClickListener) {            super(itemView);            //将全局的监听赋值给接口            this.mListener = myItemClickListener;            itemView.setOnClickListener(this);        }        /**         * 实现OnClickListener接口重写的方法         * @param v         */        @Override        public void onClick(View v) {            if (mListener != null) {                mListener.onItemClick(v, getPosition());            }        }    }    /**     * 创建一个回调接口     */    public interface MyItemClickListener {        void onItemClick(View view, int position);    }    /**     * 在activity里面adapter就是调用的这个方法,将点击事件监听传递过来,并赋值给全局的监听     *     * @param myItemClickListener     */    public void setItemClickListener(MyItemClickListener myItemClickListener) {        this.mItemClickListener = myItemClickListener;    }}

然后就是的activity你调用创建的那个方法了

package com.duanlian.recyclerviewclicklistener;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Toast;import com.duanlian.recyclerviewclicklistener.adapter.RecyclerViewAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private RecyclerView mRecyclerView;    private RecyclerViewAdapter mAdapter;    private List<String> mList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        mRecyclerView = (RecyclerView) findViewById(R.id.recycler);        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));        mList = new ArrayList<>();        for (int i = 0; i < 10; i++) {            mList.add(i + "");        }        mAdapter = new RecyclerViewAdapter(this, mList);        mRecyclerView.setAdapter(mAdapter);        //调用方法,传入一个接口回调        mAdapter.setItemClickListener(new RecyclerViewAdapter.MyItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this, "点击了" + position, Toast.LENGTH_SHORT).show();            }        });    }}

demo下载地址:http://download.csdn.net/detail/dl10210950/9662909

1 0
原创粉丝点击