在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监听器的选项。

10-08 07:20