我实施了ListView
,效果很好。每个列表条目都包含ImageView
和TextView
。缩略图和标题。
我在显示imageView.setOnItemClick()
的{{1}}中实施了ListviewAdaper
,然后再次点击TextView
使ImageView
GONE。
现在我已移至TextView
,布局相同(RecyclerView
和ImageView
)。
我TextView
的{{1}}添加了与我在列表视图中实现的代码相同的代码。
public void onBindViewHolder()
问题在于,如果我有RecyclerAdaper
个条目超过1,我点击任意 public void onBindViewHolder(MyViewHolder holder, int position) {
imageview = holder.image;
textview = holder.text;
imageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (type != MyGlobals.DATA_TYPE1) {
if (subtitle.getVisibility() == View.VISIBLE) {
imageview.startAnimation(rotate_backward);
textview.setVisibility(View.GONE);
} else {
imageview.startAnimation(rotate_forward);
textview.setVisibility(View.VISIBLE);
}
}
}
});
}
条目的任何RecyclerView
条目,只有最后一个ImageView
已成为可见/ GONE而不是相应的entrie RecyclerView
。
当我使用调试器并在TextView
的{{1}}处中断时,它实际上会显示最后一个条目的TextView
或onClick
。
如何独立处理每个ImageView
条目的TextView
条,以使RecyclerView
可见/已消失?
请注意,每个条目的ImageView
和RecyclerView
也正常运行。
答案 0 :(得分:3)
你正在做的方法不是很好,因为它在每个bindHolder
回调上创建一个新的匿名内部类。这只是一个内存的浪费,并没有充分的理由使GC过载。
您遇到问题的实际原因是因为您使用image = holder.image;
获取了对图片的引用,但接下来该引用将丢失。
采用更加分离的方法,我们可以处理这两个问题。为此,请将其添加到ViewHolder
static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.image);
imageView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// do your action here with imageView
}
}
然后从click
onBindViewHolder
相关代码
答案 1 :(得分:1)
您可以使用此
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.imageview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Your image click code
}
});
}