2013-10-10 13 views
5

Freunde,Android ExpandableListView mit Einzel Wahl CheckBox bei ChildView

ich einen ExpandableListView zu schreiben versuche, die bei ChildView einzelne Wahl Ankreuzfelder. Und ich kann nicht verstehen, wie andere CheckBoxes in OnChildClickListener() von ExpandableListView auf "false" festgelegt werden. Hier ist mein Code:

ExpListView.setOnChildClickListener(new OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
        int groupPosition, int childPosition, long id) { 
       CheckBox cb = (CheckBox) v.findViewById(R.id.checkbox); 
       if (cb.isChecked()) {   

       } else { 
        cb.setChecked(true); 
        //Here somehow I must set all other checkboxes to false. 
          //Is it possible? 
       } 
       return false; 
      } 
    }); 

hier ist xml von ChildView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="horizontal"> 

    <TextView 
    android:id="@+id/textChild" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:layout_marginLeft="20dp" 
    android:layout_marginTop="20dp" 
    android:textColor="@android:color/white" 
    android:layout_weight="1" 
    /> 

<CheckBox android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     android:clickable="false" 
     android:layout_gravity="right" 
     android:visibility="visible" 
/> 

</LinearLayout> 
+0

können Sie rekursiv durch alle Childs von ExpandableListView gehen und eine andere Checkbox finden. oder, noch besser, zuerst die Elternansicht für den ausgewählten Abschnitt finden (wenn Sie die ID nicht kennen) und die entsprechenden Kontrollkästchen erhalten. Oder noch besser - halten Sie Ihre Checkboxen im Array, ändern Sie den aktivierten Status und rufen Sie die notifyDataSetChanged() -Methode auf. –

+0

Können Sie mir bitte Ihren zweiten Vorschlag erläutern? Dies ist, was ich tun möchte, aber ich bin neu bei Android und ich kann nicht verstehen, wie Sie andere Checkboxen in ausgewählten Abschnitt – Dlash

+0

suchen können Sie mehr Code im Zusammenhang mit Ihrer ExpListView Initialisierung und laden? –

Antwort

5

Wenn Sie nur in der Lage sein wollen, ein Kontrollkästchen auswählen, könnten Sie speichern die geprüfte Checkbox in einer Variablen CheckBox checkedBox;. Wenn ein CheckBox geklickt wird, Sie etwas entlang der Linien von

@Override 
     public boolean onChildClick(ExpandableListView parent, View v, 
       int groupPosition, int childPosition, long id) { 
      CheckBox last = checkedBox //Defined as a field in the adapter/fragment 
      CheckBox current = (CheckBox) v.findViewById(R.id.checkbox); 

      last.setCheked(false); //Unchecks previous, checks current 
      current.setChecked(true); // and swaps the variable, making 
      checkedBox = current;  // the recently clicked `checkedBox` 

      return false; 
     } 

Obwohl tun konnte, ich bin nicht sicher, ob dies funktionieren wird mit Androids Recycling-System zu sehen, aber es ist einen Versuch wert.

Wenn Sie mehrere Auswahlmöglichkeiten benötigen, können Sie die checkedBox in eine List<CheckBox> erweitern und jedes Mal darüber iterieren, wenn Sie die Kontrollkästchen deaktivieren müssen.

Wenn Sie einige zusätzliche Daten speichern müssen (die Sie am wahrscheinlichsten benötigen), können Sie eine Halterklasse erstellen, z.

class CheckBoxHolder{ 

    private CheckBox checkBox: 
    private int id; 

    public CheckBoxHolder(CheckBox cb, int id){ 
     this.checkBox = cb; 
     this.id = id; 
    } 
    // Getter and/or setter, etc. 
} 
Verwandte Themen