在recyclelerView处理中的imageView的setOnClickListener

时间:2016-03-24 21:34:55

标签: android android-recyclerview onitemclicklistener

我实施了ListView,效果很好。每个列表条目都包含ImageViewTextView。缩略图和标题。

我在显示imageView.setOnItemClick()的{​​{1}}中实施了ListviewAdaper,然后再次点击TextView使ImageView GONE。

现在我已移至TextView,布局相同(RecyclerViewImageView)。

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}}处中断时,它实际上会显示最后一个条目的TextViewonClick

如何独立处理每个ImageView条目的TextView条,以使RecyclerView可见/已消失?

请注意,每个条目的ImageViewRecyclerView也正常运行。

2 个答案:

答案 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

     }
  });

 }