2013-04-04 8 views
8

Tôi đã theo dõi trang web chính thức của Android tutorial on creating contextual action menus. Sử dụng mã bên dưới, khi tôi nhấn và giữ một trong các mục ListView của mình, nó sẽ chọn, nhưng nó không trực quan chỉ ra rằng nó đã được chọn. Tôi đang sử dụng chủ đề Holo Light và tôi mong đợi màu nền của mọi mục được chọn trong ListView của tôi sẽ chuyển sang màu xanh dương.Các mục ListView không trở nên "nổi bật" trực quan khi được chọn trong chế độ hành động theo ngữ cảnh

Đây có phải là hành vi bình thường không?

Tôi đã thử nghiệm thử nghiệm listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); và thậm chí không một hàng sẽ làm nổi bật.

Sử dụng listView.setSelector(android.R.color.holo_blue_light); dường như làm nổi bật hàng được chọn lần cuối, nhưng nó không làm nổi bật các hàng khác được chọn.

Tôi đã làm điều gì đó sai, hay tôi cần thực hiện thay đổi nền theo cách thủ công? Nếu vậy, làm thế nào?

Tôi cũng đã thử listView.setSelector(android.R.drawable.list_selector_background); là bộ chọn thực có chứa các mục cho các trạng thái khác nhau. Thật không may, nó vẫn chỉ áp dụng cho mục ListView được chọn gần đây nhất.

public class MyActivity extends ListActivity { 

    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // The list is generated here 

     ListView listView = getListView(); 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 

     listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { 
      // implements empty methods 
     } 
    } 
} 

Cảm ơn!

+0

u đã quản lý để có được vào một cái nhìn hành động bối cảnh ở tất cả? Tôi đã cố gắng làm như vậy mà không có may mắn. Cố gắng để đạt được hiệu ứng tương tự như hiệu ứng đồng hồ báo thức Jelly Bean ListView, mà đi vào chế độ xóa trên mục dài báo chí. –

Trả lời

2

Theo ý kiến ​​của tôi, nó có thể là cách để mô tả, nhưng tiếc là nó không.

Những gì tôi đã tìm thấy cho đến nay là bạn phải sử dụng tài nguyên XML mô tả cách nền sẽ giống như khi 'trạng thái' của mục được 'kích hoạt'.

Tạo tệp có tên 'list_item_background_activated.xml' trong thư mục 'res/drawable /'.

Trong đó bạn xác định một phần tử gốc của loại selector:

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

</selector> 

Bây giờ bạn nên sửa đổi các tài nguyên liên quan (tài nguyên trong đó xác định cách bạn ListItem trông tương tự) để tham khảo drawable này:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_background_activated" > 
    ... 
</RelativeLayout> 
1

Tôi vừa mới triển khai Chế độ hành động theo ngữ cảnh và có cùng vấn đề mà bạn có/có. Tôi cũng nghĩ rằng hành vi mặc định sẽ là mỗi hàng được chọn sẽ được đánh dấu theo một cách nào đó, nhưng không.

Cách dễ nhất để tôi có được hiệu ứng mong muốn là thay đổi tài nguyên mục danh sách mà tôi đã sử dụng cho ListActivity của mình.

Tôi đang sử dụng một ArrayAdapter để lựa chọn đối với tôi là sản xuất tại các nhà xây dựng của adapter:

new ArrayAdapter<Exercise>(context, android.R.layout.simple_list_item_1); 

Tham số cuối cùng là id nguồn lực cho một bố cục nộp adapter sẽ sử dụng cho instanciating quan điểm mới (Liệt kê các mục) trong listview.

Tôi đã chọn hình ảnh tôi đã chọn là cơ bản nhất. Bằng cách thay đổi nó thành:

new ArrayAdapter<Exercise>(context, android.R.layout.simple_list_item_activated_1); 

Tôi nhận được hiệu ứng mong muốn, các hàng được chọn trong Chế độ hành động theo ngữ cảnh hiện đang được đánh dấu.

Ngoài ra còn có một vài định danh tài nguyên khác được xác định trong android.R.layout mà bạn có thể chọn để nhận được kết quả tương tự nhưng khác: http://developer.android.com/reference/android/R.layout.html, simple_list_item_activated_1 đã làm điều đó cho tôi.

Không chắc chắn nếu

// The list is generated here 

ẩn một adapter và nếu như vậy một bộ chuyển đổi mảng nhưng nếu có, điều này sẽ giúp.

Nếu tôi tìm bạn có thể sử dụng các nguồn tài nguyên được xác định trước ở nơi khác hoặc có lối thoát hơi dài và xác định selectors như Brabbeldas gợi ý