2013-02-26 23 views
11

Czy istnieje sposób na wyczyszczenie wybranego elementu w widoku listy?Clear SingleChoice ListView Wybór

ListView jest zdefiniowany następująco:

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:minHeight="50dp" 
    android:id="@+id/example_list" 
    android:layout_weight="2" 
    android:choiceMode="singleChoice"/> 

A jest wypełnione przy użyciu niestandardowego adaptera.

Wybrana pozycja zostanie podświetlona przy użyciu selektora:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" > 
    <shape> 
     <gradient 
     android:startColor="#3E5260" 
     android:endColor="#3E5260" 
     android:angle="270" /> 
    </shape> 
    </item> 
    <item android:state_activated="true"> 
    <shape> 
     <gradient 
     android:startColor="#3E5260" 
     android:endColor="#3E5260" 
     android:angle="270" /> 
    </shape> 
    </item> 
</selector> 

co teraz naprawdę muszę to 2 ListViews w jednej aktywności, a gdy element jest
wybrany w jednym ListView chcę, aby usunąć zaznaczenie elementu w drugi ListView.

Oba ListViews podnieść następującą procedurę obsługi kiedy element jest kliknięty:

void DeviceList_Click(object sender, EventArgs e) 
{ 
    //easy enough to check which ListView raised the event 
    //but then I need to deselect the selected item in the other listview 
} 

próbowałam rzeczy jak:

exampleList.SetItemChecked(exampleList.SelectedItemPosition, false); 

i

exampleList.SetSelection(-1); 

Ale to nie wydaje pracować.

Odpowiedz

25

Korzystanie listView.SetItemChecked(-1, true); działa dobrze tutaj.

Oto moja aktywność testowałem z:

SetContentView(Resource.Layout.Main); 
var listView = FindViewById<ListView>(Resource.Id.listView); 
_listAdapter = new CustomListAdapter(this); 
listView.Adapter = _listAdapter; 

var button = FindViewById<Button>(Resource.Id.removeChoice); 
button.Click += (sender, args) => listView.SetItemChecked(-1, true); 

Main.axml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <ListView 
    android:id="@+id/listView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:choiceMode="singleChoice" 
    /> 
    <Button 
    android:id="@+id/removeChoice" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="remove choice" 
    /> 
</LinearLayout> 
+0

To wydaje się działać, nie próbował tego, dziękuję – TimothyP

+0

Co to jest => notacja? Nigdy nie widziałem tego, który byłby używany w kodzie androida. –

+0

@IgorGanapolsky Jest to wyrażenie lambda, metoda anonimowa. To jest C#. W Javie masz implementacje 'IOnClickListener'. – Cheesebaron

15

Zastosowanie clearChoices() wyczyścić sprawdzony stan wszystkich elementów w ListView

+1

Próbowałem również, ale nie działa (powinienem pamiętać, że używam Mono dla Androida) – TimothyP

+10

Wygląda na to, że powinieneś wywołać metodę adapter.notifyDataSetChanged() po tym, aby zadziałać. – pvshnik

+0

To nie działa dla ListFragment. –

2

swoje prace proste dla mnie:

ListView listView = (ListView) findViewById(R.id.idMyListView); 
     listView.clearFocus(); 
+5

Dlaczego clearFocus() wyczyści listę jednokrotnego wyboru? Nie ma sensu. –

2

To stara sprawa, ale tylko na wypadek, gdyby ktoś tego potrzebował w przyszłości, na podstawie odpowiedzi @Cheesebaron, oto co zrobiłem:

Na każdy ListViews' OnItemClickListener set lista druga opcja jest zaznaczona pozycja na false:

list1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 
      list2.setItemChecked(list2.getSelectedItemPosition(), false); 
     } 
}); 

Ta implementacja jest w Javie, ale jeśli masz logikę tu można wdrożyć go w C#, jak również. Mam nadzieję że to pomoże.