我的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
实例,但无法以这种方式访问position
的holder
和onBindViewHolder()
参数。这有可能实现吗?如果是这样,怎么办?
提前致谢。
最佳答案
您可以在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/