2016-07-22 76 views
3

我刚开始发展到android,请大家帮忙。点击图片查看复选框?

我不知道我缺少什么.. 复选框检查作品,我也想通过点击图像检查。

这部分工作得很好:

 holder.checkbox.setId(position); 
     holder.imageview.setId(position); 
     holder.checkbox.setOnClickListener(new View.OnClickListener() 
     { 


      public void onClick(View v) 
      { 
       // TODO Auto-generated method stub 
       CheckBox cb = (CheckBox) v; 
       //ImageView cb1 = (ImageView) v; 

       int id = cb.getId(); 


       if (thumbnailsselection[id]) 
       { 
        cb.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else 
       { 
        cb.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 

      // ImageView im = (ImageView) v; 

      } 
     }); 
    /////////////////////////////////////////////////////// 

现在的问题是:

holder.imageview.setOnClickListener(new View.OnClickListener() 
     { 


      public void onClick(View v) 
      { 
       CheckBox cb = (CheckBox) v; 
       int id = v.getId(); 

       if (thumbnailsselection[id]) 
       { 
        cb.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else 
       { 
        cb.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 


      }}); 

的logcat:

java.lang.ClassCastException: android.support.v7.widget.AppCompatImageView cannot be cast to android.widget.CheckBox 

感谢。

+0

首先,ID是唯一的,不给e相同的ID到您的imageview和复选框 –

+0

显示您的完整代码活动 –

+0

我认为这是因为您正在从onClick(视图v)投射“v”作为复选框,但它是ImageView –

回答

1

保持一个共同的点击收听,

View.OnClickListener clickListener = new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      int id = holder.checkbox.getId(); 

      if (thumbnailsselection[id]) 
      { 
       holder.checkbox.setChecked(false); 
       thumbnailsselection[id] = false; 
      } else 
      { 
       holder.checkbox.setChecked(true); 
       thumbnailsselection[id] = true; 
      } 
     } 
    }; 

然后设置这个监听到两个imageview的并且复选框像这样,

holder.checkbox.setOnClickListener(clickListener); 
holder.imageview.setOnClickListener(clickListener); 
+0

我收到一个错误,说明变量持有者从内部类中访问,需要声明最终的 – Janos

+0

您可以在全局声明持有者并根据需要重新初始化它。 – Tony

+0

这样做最简单的方法是什么?抱歉的问题,并感谢您的帮助! – Janos

0
holder.imageview.setOnClickListener(new View.OnClickListener()public void onClick(View v){ 
    public void onClick(View v){ 
    CheckBox cb = (CheckBox) v; // In here v is the ImageView not CheckBox so you will get java.lang.ClassCastException 

而在你的情况,你可以使用

holder.imageview.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 

       int id = holder.checkbox.getId(); 
       if (thumbnailsselection[id]){ 
        holder.checkbox.setChecked(false); 
        thumbnailsselection[id] = false; 
       } else { 
        holder.checkbox.setChecked(true); 
        thumbnailsselection[id] = true; 
       } 
      } 
}); 
+0

您再次尝试投射Imageview复选框 –

+0

是的,但如果我使用ImageView我不能使用setChecked(false或true)部分。 – Janos

+0

@Janos尝试托尼解决方案,它比我的解决方案更可重用 –