RecyclerView添加點擊事件

本文主要介紹:如何給RecyclerView添加點擊事件。在這之前,小編搜索過,但沒有搜到步驟很全的文章。所以,以此記錄,希望能對一些朋友有所幫助。

書名:《高效能人士的七個習慣》

給RecyclerView添加點擊事件,主要分為三步:

第一步:定義事件接口

public interface OnItemClickListener {

? void onItemClick(View view, int position);

}

第二步:設置RecyclerView數(shù)據(jù)適配器

以下只列出了部分重要代碼,文末有整個Acticity代碼:

public class MyAdapter extends RecyclerView.Adapter implementsView.OnClickListener {

? private OnItemClickListener mOnItemClickListener = null;

? @Override

? public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_main, null);

// 給View注冊點擊事件

view.setOnClickListener((View.OnClickListener) this);

return new MyViewHolder(view);

}

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

MyViewHolder holder2 = (MyViewHolder) holder;

Model model = mData.get(position);

holder2.userName.setText(model.getName());

// 將position保存在itemView的Tag中,以便點擊時進行獲取

holder2.itemView.setTag(position);

}

@Override

public void onClick(View v) {

if (mOnItemClickListener != null) {

// 注意這里使用getTag方法獲取position

mOnItemClickListener.onItemClick(v, (int)v.getTag());

}

}

public void setOnItemClickListener(OnItemClickListener listener) {

this.mOnItemClickListener = listener;

}

}

第三步:監(jiān)聽點擊事件

myAdapter.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(View view, int position){

// 在這里處理item的點擊事件

}

});

Activity完整代碼:

public class MainActivity extends AppCompatActivity {

private MyAdapter myAdapter;

private ArrayList<Model> list = new ArrayList<>();// 數(shù)據(jù)源

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

myAdapter = newWaterFallAdapter(this, list);

// 找到RecyclerView控件

RecyclerView mRecyclerView = findViewById(R.id.recycler_view);

mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));

mRecyclerView.setAdapter(myAdapter);

// 設置監(jiān)聽事件

myAdapter.setOnItemClickListener(newOnItemClickListener() {

@Override

public voidonItemClick(View view, int position){

// 在這里處理item的點擊事件,position就是點擊的item

}

});

}

// 定義接口

public interface OnItemClickListener {

void onItemClick(View view, int position);

}

public class MyAdapter extends RecyclerView.Adapter implements View.OnClickListener {

private final Context mContext;

private ArrayList<Model>?mData;//定義數(shù)據(jù)源

private OnItemClickListener mOnItemClickListener = null;

//定義適配器構造方法,默認傳入上下文和數(shù)據(jù)源

public MyAdapter(Context context, ArrayList<Model> data) {

mContext = context;

mData = data;

}

// 將ItemView渲染進來,創(chuàng)建ViewHolder

@Override

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item_main, null);

//將創(chuàng)建的View注冊點擊事件

view.setOnClickListener((View.OnClickListener) this);

return new MyViewHolder(view);

}

// 將數(shù)據(jù)源的數(shù)據(jù)綁定到相應控件上

@Override

public void onBindViewHolder(RecyclerView.ViewHolder holder, intposition) {

MyViewHolder holder2 = (MyViewHolder) holder;

HomeModel model = mData.get(position);

holder2.userName.setText(model.getName());

// 將position保存在itemView的Tag中,以便點擊時進行獲取

holder2.itemView.setTag(position);

}

@Override

public int getItemCount() {

return list.size();

}

//定義自己的ViewHolder,將View的控件引用在成員變量上

public class MyViewHolder extends RecyclerView.ViewHolder {

public TextView userName;

public MyViewHolder(View itemView) {

super(itemView);

userName = (TextView) itemView.findViewById(R.id.recycler_view_tv);

}

}

@Override

public void onClick(View v) {

if (mOnItemClickListener != null) {

//注意這里使用getTag方法獲取position

mOnItemClickListener.onItemClick(v, (int)v.getTag());

}

}

public void setOnItemClickListener(OnItemClickListener listener) {

this.mOnItemClickListener = listener;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容