我的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
的{{1}}和holder
参数方式。
这有可能实现吗?如果是这样,怎么样?
提前致谢。
答案 0 :(得分:1)
您可以在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
}
}
}
答案 1 :(得分:0)
是的,可以实现它,正如@Gurupad建议的那样,使用onClick(View v)
方法中的switch语句。从个人经验来看,它是处理多个onClicks的最佳方式,它使您和您的团队能够轻松阅读和理解您的代码(如果与团队合作)。
有关使用带有按钮的开关语句的进一步帮助,请单击
public void onClick(View v) {
switch (v.getId()){
case R.id.button1:
//some code here
break;
case R.id.button2:
//some code here
break;
}
}