2013-02-26 30 views
11

ListViewで選択した項目をクリアする方法はありますか?SingleChoiceをクリアListViewの選択

ListViewコントロールは、次のように定義されています。

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

とカスタムアダプターを使用して満たされています。

選択した項目は、セレクタを使用して強調表示されています:

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

は、今、私が実際に持っているもの、単一の活性が2つのリストビューで、アイテムが1つのリストビューで選択した
あるとき、私は内の項目の選択を解除したいです他のListView

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 
} 

私はのようなものを試してみた:

どちらのリストビューは、アイテムがクリックされた次のハンドラを上げる

exampleList.SetItemChecked(exampleList.SelectedItemPosition, false); 

exampleList.SetSelection(-1); 

しかし、それはいないようです働く

答えて

25

内のすべての項目のチェック状態をクリアします。ここで

は、私がテストした私の活動です:

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

これはうまくいくようですが、それを試していない、ありがとうございます – TimothyP

+0

=>表記法とは何ですか?私はアンドロイドコードで使用されていることは見たことがありません。 –

+0

@IgorGanapolskyラムダ式で、匿名メソッドです。これはC#です。 Javaでは 'IOnClickListener'の実装があります。 – Cheesebaron

15

使用clearChoices()ここで正常に動作しますlistView.SetItemChecked(-1, true);を使用してリストビュー

+1

私もそれを試してみましたが、動作していないようです(Android用にMonoを使用していることに注意してください) – TimothyP

+10

この後に、adapter.notifyDataSetChanged()を呼び出して動作させる必要があるようです。 – pvshnik

+0

これはListFragmentでは機能しません。 –

2

そのは私のためのシンプルな作品:

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

なぜclearFocus()は単一選択リストビューをクリアしますか?意味がありません。 –

2

それはちょうど古い質問ですが、 @ Cesebaronの答えに基づいて、他の誰かがそれを将来必要とする場合は、私がしたことがここにあります:

各リストビューOnItemClickListenerがfalseに相手のリストにチェック項目を設定するには:

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

この実装はJavaである、しかし、あなたはここにロジックを取得する場合は、同様にC#でそれを実装することができます。お役に立てれば。

関連する問題