我的ViewHolder(内部)课程:

static class HostViewHolder extends RecyclerView.ViewHolder {

    ImageButton button1;
    ImageButton button2;

    HostViewHolder(View listItemView) {
        super(listItemView);

        button1 = (ImageButton) listItemView.findViewById(R.id.button1);
        button2 = (ImageButton) listItemView.findViewById(R.id.button2);
    }
}


onBindViewHolder()中,我通过以下方式将OnClickListener附加到Button上:

@Override
public void onBindViewHolder(final HostViewHolder holder, int position) {
    holder.button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int pos = holder.getAdapterPosition();
            // doing something using the value of pos
        }
    });
    holder.button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int pos = holder.getAdapterPosition();
            // doing some other thing using the value of pos
        }
    });
}


它工作正常,但是我用这种方法的问题是我为每个OnClickListener创建一个新的ViewHolder实例,这有点多余。

我想创建一个要使用的OnClickListener实例,但无法以这种方式访问​​positionholderonBindViewHolder()参数。

这有可能实现吗?如果是这样,怎么办?

提前致谢。

最佳答案

您可以在ViewHolder类本身中附加onClickListener。

static class HostViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    ImageButton button1;
    ImageButton button2;

    HostViewHolder(View listItemView) {
        super(listItemView);

        button1 = (ImageButton) listItemView.findViewById(R.id.button1);
        button2 = (ImageButton) listItemView.findViewById(R.id.button2);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        switch (v.getId()){
            //handle clicks
        }
    }
}

关于android - 单个OnClickListener用于多个ViewHolders,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39959180/

10-12 04:08