2016-07-22 72 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嘗試託尼解決方案,它比我的解決方案更可重用 –