2016-07-22 31 views
3

Ich habe gerade begonnen, zu Android zu entwickeln, bitte helfen.Klicken Sie auf ein Bild, um das Kontrollkästchen zu aktivieren?

Ich kann nicht herausfinden, was ich vermisse .. Die Checkbox funktioniert, ich möchte auch überprüfen, indem Sie auf das Bild tippen.

dieser Teil funktioniert gut:

 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; 

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

hier ist das Problem:

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 

Dank.

+0

Zunächst IDs sind einzigartig, nicht th geben die gleiche ID zu Ihrem Imageview und Checkbox –

+0

zeigen Sie Ihre Full-Code der Aktivität –

+0

Ich denke, dies passiert, weil Sie "v" aus dem OnClick (View v) als Kontrollkästchen, aber es ist die ImageView –

Antwort

1

einen gemeinsamen Klick Zuhörer halten verwenden,

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; 
      } 
     } 
    }; 

Dann diesen Zuhörer wie so sowohl Imageview und Checkbox gesetzt,

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

Ich erhalte einen Fehler, dass Variablenhalter aus innerhalb der inneren Klasse zugegriffen wird, muss endgültig erklärt werden – Janos

+0

Sie könnten Ihren Inhaber global erklären und es nach Bedarf neu initialisieren. – Tony

+0

Was ist der einfachste Weg das zu tun? Entschuldigung für die Fragen und danke für Ihre Hilfe! – 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 

Und in Ihrem Fall können Sie

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

Sie versuchen erneut zu werfen Bildansicht zum Kontrollkästchen –

+0

Ja, aber wenn ich ImageView verwende, kann ich den setChecked (false oder true) Teil nicht verwenden. – Janos

+0

@Janos versuchen Tony Lösung, es mehr wiederverwendbar als meine Lösung –

Verwandte Themen