2012-03-15 45 views
27

Như đã thấy trong phiên bản máy tính bảng của gmail và google talk Tôi đang cố gắng hiển thị lựa chọn hiện tại trong một listview. Tôi biết đây không phải là tiêu chuẩn thực hành và nên tránh khi cần thiết. Trong chương trình của tôi listview là alway trên màn hình và mục nhấp cho thấy một mảnh mới bên phải (tương tự như gmail và google talk).Hiển thị lựa chọn hiện tại trong danh sách xem

Để tránh người dùng đoán mục nào đã được chọn Tôi muốn hiển thị lựa chọn hiện tại, tôi đã thử tạo bộ chọn nhưng sau khi được nhấp, nó sẽ chuyển về nền bình thường.

làm cách nào tôi có thể đạt được điều này?

đây là selector xml tôi

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:drawable="@drawable/list_item_bg2" android:state_pressed="false" android:state_selected="false" 
    android:state_focused="false"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false" 
    android:state_selected="true" android:state_checked="false"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="true" 
    android:state_selected="false"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false" 
    android:state_selected="false" android:state_checked="true"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true" android:state_focused="true" 
    android:state_selected="true" android:state_checked="true"/> 
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/> 



</selector> 

Trả lời

72

gì Gmail và các ứng dụng tương tự như sử dụng là trạng thái activated, với cách bố trí hàng thích hợp. Xem:

Tóm lại, bạn:

  • Sử dụng một cách bố trí hàng với một nền kích hoạt (ví dụ, android.R.layout.simple_list_item_activated_1)
  • Sử dụng setChoiceMode(ListView.CHOICE_MODE_SINGLE) trên ListView
  • của bạn
  • "Kiểm tra" hàng mà nên được kích hoạt sử dụng setItemChecked() trên ListView của bạn để kích hoạt "kích hoạt" nhà nước và có điểm nhấn dai dẳng
+1

+1 và cảm ơn cho câu trả lời tốt. – PhatHV

+1

tuyệt vời làm việc giống như tôi muốn thêm lời giải thích nếu tôi cần thay đổi màu nền! – tyczj

+0

Rất hữu ích vì tôi đã cố gắng làm nổi bật các bản xem trước của mình khi được chọn, nhưng các điểm nổi bật trùng lặp đã xảy ra. Lời giải thích của bạn chỉ đơn giản là giải quyết vấn đề của tôi và tôi không cần phải làm cho con tôi xem như setSelected (true). Cảm ơn – iabhi

7

Nếu bạn sử dụng một cách bố trí tùy chỉnh cho mỗi hàng:

  1. tạo công cụ chọn với android: state_activated = "true"
  2. áp dụng công cụ làm nền của bố cục tùy chỉnh.

một ví dụ về drawable selector:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
android:exitFadeDuration="@android:integer/config_shortAnimTime"> 
<item android:state_activated="true" android:drawable="@color/android_green" /> 
<item android:drawable="@android:color/transparent" /> 
</selector> 
+0

Điều này làm việc cho tôi trong khi phương pháp khác thì không! Cảm ơn! Từ mã: listview.setChoiceMode (ListView.CHOICE_MODE_SINGLE); listview.setItemChecked (3, true); listview.setSelection (3); Tại đây "3" là chỉ mục của mục được chọn. setItemChecked áp dụng nền màu có thể vẽ và setSelection làm cho danh sách sẽ tự động cuộn đến mục đó. –

9

tùy chọn khác của bạn là để thiết lập nền tảng của danh mục tùy chỉnh của bạn để android: background = "android:? Attr/activatedBackgroundIndicator"

+0

Có đây là cách. Nhưng tôi muốn áp dụng tính năng này cho API cấp 8 .. –

0

Điều gì đã hiệu quả với tôi

  1. ghi đè lên toàn cầu ListView S tyle trong chủ đề của bạn

    <item name="android:listViewStyle">@style/MyListView</item>

  2. xác định phong cách của bạn

    <style name="MyListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview_background_selector</item> </style>

  3. xác định listview_background_selector chọn.xml

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@color/ListViewBackGroundColorPressed" android:state_activated="true" /> </selector>

  4. thiết lập nền của bạn listview-item-layout

    android:background="?android:attr/activatedBackgroundIndicator"

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