在Internet上的教程中,他们通过RecyclerView的Adapter中的setOnClickListener定义了两种方式:在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中设置onClick监听器的选项。除此之外,它还使您的代码看起来更简洁。
但是,如果说,当单击“按钮”时,您想要在与单击的按钮相同的索引/位置中更改TextView的文本,则需要使用在onBindViewHolder方法中设置onClick监听器的选项。