【发布时间】:2015-04-09 11:32:20
【问题描述】:
在互联网上的教程中,他们在 RecyclerView 的适配器中设置了 OnClickListener,他们以两种方式定义它:在 ViewHolder 内部或在 BindViewHolder 内部。
我的问题是哪种方法更好,如果可以的话,请推荐其他方法
1) 在 ViewHolder 内:
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
tvSrc = (TextView) itemView.findViewById(R.id.tvSrc);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "inside viewholder position = " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
}
2) 在 BindViewHolder 内
public void onBindViewHolder(DisplayTrainsAdapter.ViewHolder viewHolder, final int position) {
viewHolder.tvSrc.setText(mDataset.get(position).strSrc);
viewHolder.tvSrc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "position = " + getItemId(position), Toast.LENGTH_SHORT).show();
}
});
}
【问题讨论】:
-
让你的自定义 ViewHolder 实现 View.OnClickListener,这样你就不需要 ViewHolder 中的自定义 View.OnClickListener 类
标签: android android-viewholder android-recyclerview