2011-09-12 35 views
7

Tôi có một listview được tùy chỉnh để hiển thị một hình ảnh và 2 textview. Tôi chỉ đơn giản muốn đánh dấu một trong những mục từ danh sách của tôi.setItemChecked (vị trí int, giá trị boolean) không hoạt động?

Thứ nhất, tôi đi với phương pháp setSelection listview mà cuối cùng tôi phát hiện ra nó không phải là cách vì nó không hoạt động ở chế độ cảm ứng.

Vì vậy, tôi thực hiện một số tìm kiếm và thấy rằng tôi cần sử dụng phương thức setItemChecked. Vì vậy, tôi làm cho một danh sách nhà nước màu.

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@color/checkbox_bg_fcs" /> 
    <item android:drawable="@color/WHITE" /> 
</selector> 

Tôi đã sử dụng nó để đặt màu nền cho mục danh sách tùy chỉnh của mình.

Từ hoạt động Danh sách, tôi gọi setItemChecked (vị trí, true) thành chỉ mục cụ thể của chế độ xem danh sách của tôi.

Thật không may, nó dường như không hiệu quả đối với tôi. Có điều gì còn thiếu? Bất cứ ai có may mắn với nó?

Lưu ý **, tôi đã truy xuất dữ liệu cho chế độ xem danh sách từ mạng. Tôi làm setItemChecked chỉ sau khi tôi có dữ liệu trong listview của tôi.
Chế độ xem danh sách của tôi cũng đang ở chế độ lựa chọn duy nhất.

+0

Hiện bạn đang thực hiện sự kiện setItemCheck. –

+0

listview.setItemChecked (1, true); Đó có phải là những gì bạn cần không? Cuộc gọi nằm trong onResume(). Tôi đã thử nhiều vị trí (0,1,2,3, ...) – PH7

+0

Tôi chỉ tò mò thôi. '' làm gì? –

Trả lời

8

Tôi e rằng không phải là cách dễ dàng để thực hiện điều đó trong Khung công tác Android.

Để có được setSelection (...) ngày làm việc, Xem bạn có để thực hiện các giao diện follogin: android.widget.Checkable

Có thể bạn đang sử dụng một số bố trí cho View (một hình ảnh và 2 TextView trong một LinearLayout có lẽ ?), không triển khai giao diện Có thể kiểm tra.

Điều bạn có thể làm là tạo lớp Chế độ xem tùy chỉnh triển khai Có thể kiểm tra.

Kiểm tra các liên kết dưới đây để biết một LinearLayout checkable:

http://tokudu.com/2010/android-checkable-linear-layout/


Nếu bạn muốn thay đổi nền, hơn viết lại phương pháp setChecked để làm những gì bạn muốn. dụ Rất đơn giản:

@Override 
public void setChecked(boolean checked) { 
    if (checked) { 
     this.setBackgroundColor(Color.RED); 
    } else { 
     setBackgroundColor(Color.BLACK); 
    } 
} 
+0

Hãy cho tôi biết nếu nó giúp/làm việc, hoặc bạn cần giải thích thêm. – balazsbalazs

+0

Thz cho đầu vào. Thật không may, đây không phải là những gì tôi yêu cầu. setSelection làm việc hoàn toàn tốt trong liên kết được giới thiệu của bạn. Nhưng nó thiếu thông tin phản hồi trực quan. Nói cách khác, mục danh sách của tôi không được đánh dấu mặc dù nó là vị trí chính xác (listview được cuộn đến vùng chọn). FYI, tôi đã kiểm tra bằng cách làm theo liên kết trong câu trả lời của bạn. :) – PH7

+0

thz. nó giải quyết vấn đề của tôi với làm nổi bật. :) – PH7

1

thử bao gồm thuộc tính android:state_enabled.

+0

sry. không thành công. thz anyway. – PH7

8

bộ cho chọn của bạn danh sách hàng nền, trong đó có nguồn lực cho state_activated:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_activated="true" android:state_enabled="true" android:drawable="@android:color/black"></item> 
    <item android:drawable="@android:color/transparent" android:state_enabled="true"/> 

</selector> 
+1

Đây là cách dễ nhất để làm nổi bật hàng đã chọn trong chế độ xem danh sách. Nó sẽ không hoạt động nếu listview không có ** attribute ** choiceMode 'android: choiceMode =" singleChoice "' –

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