2013-02-26 75 views
11

Có cách nào để xóa mục đã chọn trong ListView không?Xóa danh sách lựa chọn đơn Chọn lựa

Các ListView được định nghĩa như thế này:

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

Và được làm đầy bằng một Adapter tùy chỉnh.

Các sản phẩm được chọn được đánh dấu bằng một 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> 

Bây giờ những gì tôi thực sự phải là 2 ListViews trong một hoạt động đơn lẻ và khi một mục là
chọn trong một ListView Tôi muốn bỏ chọn các mục trong ListView khác.

Cả ListViews nâng cao xử lý sau khi một mục được nhấp:

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 
} 

Tôi đã thử những thứ như:

exampleList.SetItemChecked(exampleList.SelectedItemPosition, false); 

exampleList.SetSelection(-1); 

Nhưng điều đó dường như không làm việc.

Trả lời

25

Sử dụng listView.SetItemChecked(-1, true); hoạt động tốt ở đây.

Đây là Hoạt động của tôi, tôi đã thử nghiệm với:

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

Điều này dường như hoạt động, đã không cố gắng mà một, cảm ơn bạn – TimothyP

+0

=> ký hiệu là gì? Tôi chưa bao giờ thấy được sử dụng trong mã Android. –

+0

@IgorGanapolsky Đây là một biểu thức lambda, một phương thức ẩn danh. Đây là C#. Trong Java, bạn có triển khai 'IOnClickListener'. – Cheesebaron

15

Sử dụng clearChoices() để xóa tình trạng kiểm tra tất cả các mục trong một ListView

+1

Tôi đã thử điều đó nhưng dường như không hoạt động (nên lưu ý tôi đang sử dụng Mono cho Android) – TimothyP

+10

Có vẻ như bạn nên gọi adapter.notifyDataSetChanged() sau này để làm cho nó hoạt động. – pvshnik

+0

Điều này không hoạt động đối với một ListFragment. –

2

của nó làm việc đơn giản đối với tôi:

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

Tại sao clearFocus() xóa một ListView một lựa chọn? Làm cho không có ý nghĩa. –

2

Đó là một câu hỏi cũ, nhưng chỉ trong trường hợp người khác cần nó trong tương lai, dựa trên câu trả lời @Cheesebaron, đây là những gì tôi đã làm:

Trên mỗi ListViews' OnItemClickListener thiết lập danh sách của người khác kiểm tra mục false:

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

Triển khai này trong Java, nhưng nếu bạn nhận được logic ở đây bạn có thể thực hiện nó trong C# là tốt. Hi vọng điêu nay co ich.

Các vấn đề liên quan