Adapter 的 ViewHolder 中的 @OnClick 方法未指向正确的列表项

@OnClick method within Adapter's ViewHolder doesn't point on the right list item

我最近目睹了一个奇怪的行为,当我使用 ButterKnife 在 Adapter 中绑定图像按钮的 OnClick 方法时,正如这个问题的标题所指出的那样。正如文档中所建议的,我声明了一个内部 class ViewHolder,其中发生了所有 @Bind 声明,我也有 @OnClick

我的 ViewHolder class 看起来像这样:

    class ViewHolder {

    private Product product;

    @Bind(R.id.title)
    TextView text;
    @Bind(R.id.price)
    TextView price;

    public ViewHolder(View view, Product product) {
        ButterKnife.bind(this, view);
        this.product = product;
    }

    @OnClick(R.id.image_button)
    public void launchProductFragment() {
            ProductFragment fragment = new ProductFragment();
            Bundle args = new Bundle();
            args.putInt(Tools.WS_PRODUCT_GROUP_ID, product.getId());                
            FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
        }
}

注意:当我直接在我的 getView 方法中设置一个很好的旧 OnClickListener 时,点击工作正常,并显示预期的结果。

这是一个已知问题吗?还是我在实施中所做的事情导致了它?

不要在构造函数中传递Product,在Adapter.

getView()方法中传递给viewholder
class ViewHolder {

    private Product product;

    void bindProduct(Product product) {
        this.product = product;
    }
}

在您的适配器中执行以下操作:

@Override
public void getView(int position, View convertView, ViewGroup parent) {
    // Some code here
    holder.bindProduct(myproductlist.get(position));
    //other code...
}