2016-04-15 6 views
0

Ich habe eine Listenansicht, aus der der Benutzer zwei Teams auswählen muss, indem er die Kontrollkästchen aktiviert und anschließend mit OK bestätigt. Das Problem ist, ich möchte es so machen, dass es nur zwei markierte Kästchen zu jeder Zeit geben kann Beispiel: wenn der Benutzer Team 1 und 2 auswählt, dann sollten die Kästchen für 1 und 2 überprüft werden, aber wenn der Benutzer dann Team 3 auswählt , 1 sollte automatisch deaktiviert werden.Deaktivieren Sie CheckTextView von ListView, so dass zu jeder Zeit nur zwei Kontrollkästchen aktiviert sind.

Ich habe bereits geschafft, die Position der Box zu isolieren und zu speichern, die deaktiviert werden muss, aber ich weiß nicht, was ich damit machen soll.

Danke !!

heres Listenansicht

<Button 
    android:id="@+id/btnConfirm" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Ok" 

    /> 

<ListView 
    android:id="@+id/listEquipe" 
    android:layout_below="@+id/btnConfirm" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

und das folgende Layout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
> 
<TextView 
    android:id="@+id/txtIdEquipe" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:visibility="gone"/> 
<CheckedTextView 

    android:id="@+id/txtNomEquipe" 

    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
    android:padding="5dp" 
    android:textSize="12pt" 
    android:textColor="#000000" 
    /> 

</LinearLayout> 

Antwort

0

Dies ist ein Weg, um es (Ich habe dumme Daten im Adapter) zu erreichen:

public class MainActivity extends AppCompatActivity { 

private List<Integer> selectedItems = new ArrayList<>(); 

private String[] teams = new String[]{ "Team A", "Team B", "Team C"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ListView lv = (ListView) findViewById(R.id.listEquipe); 

    final BaseAdapter adapter = new BaseAdapter() { 
     @Override 
     public int getCount() { 
      return teams.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return teams[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = getLayoutInflater().inflate(R.layout.item, null); 
      ((TextView) view.findViewById(R.id.txtIdEquipe)).setText((String) getItem(position)); 
      CheckedTextView ctv = (CheckedTextView) view.findViewById(R.id.txtNomEquipe); 
      ctv.setChecked(selectedItems.contains(position)); 
      return view; 
     } 
    }; 

    lv.setAdapter(adapter); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if(selectedItems.contains(position)) { 
       selectedItems.remove(position); 
      } 
      else { 
       selectedItems.add(position); 
       if(selectedItems.size() > 2) { 
        selectedItems.remove(0); 
       } 
      } 

      adapter.notifyDataSetChanged(); 
     } 
    }); 
} 
}