在互联网上的教程中,他们在RecyclerView的Adapter中设置了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(); } }); }
解决方法
两种选择都有其优点和缺点.
例如,如果单击一个Button并且您想要更改按钮的文本,那么您应该使用在ViewHolder中设置onClick侦听器的选项.除此之外,它还使您的代码看起来更干净.
但是,如果单击按钮,您想要在与单击的按钮相同的索引/位置更改TextView的文本,则需要使用在onBindViewHolder方法中设置onClick侦听器的选项.