2013-02-26 14 views
11

Gibt es eine Möglichkeit, das ausgewählte Element in einem ListView zu löschen?Clear SingleChoice ListView-Auswahl

Das Listview ist wie folgt definiert:

<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"/> 

und wird mit einem benutzerdefinierten Adapter gefüllt.

Das ausgewählte Element ist markiert mit einem Selector:

<?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> 

Nun, was wirklich ist, ich habe zwei Listviews in einer einzigen Tätigkeit und wenn ein Element
in einem Listview ausgewählt ist möchte ich den Artikel abzuwählen in das andere ListView.

Beide Listviews erhöhen die folgende Prozedur, wenn ein Element geklickt wird:

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 
} 

Ich habe versucht, Dinge wie:

exampleList.SetItemChecked(exampleList.SelectedItemPosition, false); 

und

exampleList.SetSelection(-1); 

Aber das scheint nicht arbeiten.

Antwort

25

Mit listView.SetItemChecked(-1, true); arbeitet hier in Ordnung zu löschen.

ist hier meine Tätigkeit ich getestet mit:

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

Das scheint zu funktionieren, habe das nicht versucht, danke – TimothyP

+0

Was ist => Notation? Ich habe nie gesehen, dass in Android-Code verwendet. –

+0

@IgorGanapolsky Es ist ein Lambda-Ausdruck, eine anonyme Methode. Das ist C#. In Java haben Sie die 'IOnClickListener'-Implementierungen. – Cheesebaron

15

Verwenden clearChoices() den Überprüfungsstatus aller Elemente in einem Listview-

+1

Ich habe das auch versucht, aber scheint nicht zu funktionieren (sollte beachten, dass ich Mono für Android verwende) – TimothyP

+10

Es scheint, dass Sie adapter.notifyDataSetChanged() danach aufrufen sollten, damit es funktioniert. – pvshnik

+0

Dies funktioniert nicht für ein ListFragment. –

2

Sein für mich funktioniert einfach:

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

Warum löschte clearFocus() einen Single-Choice-ListView? Macht keinen Sinn. –

2

Es ist eine alte Frage, aber nur falls jemand anderes es in der Zukunft braucht, basierend auf @ Cheesebaron Antwort, hier ist, was ich getan habe:

Auf jeder Listviews OnItemClickListener setzen Sie die Liste überprüft Elements andere auf false:

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

Diese Implementierung ist in Java, aber wenn Sie die Logik hier können Sie es in C# als auch umzusetzen. Hoffe das hilft.