1. 程式人生 > >Android RecyclerView給Item新增點選事件

Android RecyclerView給Item新增點選事件

方法一、直接在Adapter中的onBindViewHolder()方法中實現點選事件

@Override
    public void onBindViewHolder(MyViewHolder viewHolder, final int postion) {

        viewHolder.textView.setText(mDatas.get(postion));
        viewHolder.rootView.setOnClickListener(new OnClickListener() {
            @Override
            public
void onClick(View arg0) { // 點選事件 Toast.makeText(mContext, postion + "", 1000).show(); } }); }

方法二、

1、自定義一個介面。

public interface OnItemClickListener {
    public void onItemClick(View view, int postion);
}

2、在自定義的ViewHolder中實現onClickListenr介面,先宣告一個自定義介面的變數,在自定義的ViewHolder的建構函式中新增一個引數-自定義的這個介面,並設定itemview的點選事件,在點選事件中轉移到自定義的介面上,傳到外面的呼叫者。

/**
 * 自定義的ViewHolder繼承自android.support.v7.widget.RecyclerView.ViewHolder
 * 
 * @author raphets
 *
 */
public class MyViewHolder extends ViewHolder implements OnClickListener {
    TextView textView;
    private OnItemClickListener mListener;// 宣告自定義的介面

    // 建構函式中新增自定義的介面的引數
    public MyViewHolder(View itemView, OnItemClickListener listener) {
        super
(itemView); mListener = listener; // 為ItemView新增點選事件 itemView.setOnClickListener(this); textView = (TextView) itemView.findViewById(R.id.textView); } @Override public void onClick(View v) { // getpostion()為Viewholder自帶的一個方法,用來獲取RecyclerView當前的位置,將此作為引數,傳出去 mListener.onItemClick(v, getPosition()); } }

3、在自定義的Adapter中定義一個方法public void setOnItemClickListener(OnItemClickListener listener) {this.mClickListener = listener;}並暴露給外面的呼叫者

MyRecylerViewAdapter

public class MyRecylerViewAdapter extends Adapter<MyViewHolder> {
    private Context mContext;
    private List<String> mDatas;
    private OnItemClickListener mClickListener;

    public MyRecylerViewAdapter(Context context, List<String> datas) {
        this.mContext = context;
        this.mDatas = datas;
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    @Override
    public void onBindViewHolder(MyViewHolder arg0, int arg1) {
        final int pos = arg1;
        arg0.textView.setText(mDatas.get(arg1));

    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item, arg0, false);
        MyViewHolder holder = new MyViewHolder(view,mClickListener);
        return holder;
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mClickListener = listener;
    }
}

4、在MainActivity中使用

adapter.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(View view, int postion) {
                Toast.makeText(MainActivity.this, postion+"", 1000).show();

            }
        });

方法三、修改RecyclerView原始碼,在裡面實現點選事件,這裡我就不說了。