2012-07-21 22 views
14

tôi triển khai ActionMode trong Ứng dụng Android của mình bằng ActionBarSherlock. Với ABS, bạn có thể tạo Mã hành động trước API 11 nhưng cách dễ dàng với: listView.setMultiChoiceModeListener(new MultiChoiceModeListener() ... không dành cho ứng dụng trước API 11. Có cách nào tốt để xây dựng Menu ngữ cảnh chế độ hành động trước API 11 không? Tôi muốn thực hiện một cú nhấp chuột dài trên một mục danh sách và bắt đầu ActionMode, trong đó tôi có thể nhấp vào nhiều mục. Trên một nhấp chuột đơn giản, tôi hiển thị một trang chi tiết của mục danh sách. Tôi sử dụng phương pháp registerForContext() nhưng điều này tạo ra một cú nhấp chuột đơn giản và dài.MultiChoiceMode trước API 11

Có ai là mẹo hay cho tôi.

EDIT
Giải pháp cho câu hỏi của tôi đã được như sau: Trên một mục dài nhấp i hoạt động chế độ hoạt động và tiết kiệm này trong một biến. Trong phương pháp bấm vào mục tôi thực hiện một câu lệnh if-else với:

if(actionMode == null) 
{ 
    // open new activity or update second fragment 
    showDetails(itemPosition); 
} 
else 
{ 
    // update ui or close CAB if no item selected 
    showCAB(itemPosition); 
} 

Phương thức showCAB (vị trí) cập nhật số mục được chọn, đánh dấu mục nền và vân vân.

Trả lời

12

Được rồi, tôi chỉ làm điều đó ngày hôm nay, nhờ vào trang web đó: http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps

Về cơ bản, bạn chỉ cần thiết lập ChoiceMode ListView của bạn để ListView.CHOICE_MODE_MULTIPLE, để thiết lập một onItemClickListener rằng sẽ kiểm tra những gì các mặt hàng đều được kiểm tra trên ListView và để tạo một lớp riêng tư thực hiện ActionMode.Callback sẽ quản lý ActionBar theo ngữ cảnh.

Tôi cho phép bạn đi trên blogpost đó để xem mọi thứ chi tiết và một số mã!

+0

Cảm ơn bạn đã trả lời. Tôi tìm thấy trang này cũng ngày hôm qua và thực hiện các giải pháp. Tôi thay đổi onItemClickListener thành một onItemLongClickListener và điều này không chạy quá tốt. Tôi có thể khởi động ActionMode sau một cú nhấp chuột ngắn trên một Item, đóng hoạt động của tôi mở ra và sau đó nhấn lại một lần nữa vào mục đó. Giải pháp không hoàn hảo nhưng tốt cho sự khởi đầu. – Happo

+0

Nếu tôi hiểu rõ vấn đề của bạn, đó là nó vẫn mở hoạt động của bạn trên một nhấp chuột đơn giản vào các mục của ListView của bạn? Sau đó, trên 'onItemLongClickListener', bạn có thể đặt' listView' 'onItemClickListener' thành null, để nó không mở bất kỳ hoạt động nào.Hãy chắc chắn để đặt nó trở lại bản gốc 'onItemClickListener' (bạn có thể lưu nó vào một biến) trên' onDestroyActionMode' của lớp 'ModeCallback' – MagicMicky

+0

Trước khi phương thức onItemClick được gọi là sự kiện đã thông qua phương thức onItemLongClick. Phương thức này trả về một boolean vì vậy nếu tôi trả về true sự kiện đã được xử lý và không đạt được phương thức onItemClick. Nếu tôi trả về false tôi đã không xử lý các nhấp chuột dài và thực hiện một loại nhấp chuột. Tôi tìm thấy điều này trong một số câu hỏi khác nhưng giải pháp của bạn cũng có thể. Tôi thử nghiệm nó một chút sau ngày hôm nay. – Happo

5

Bạn cũng có thể xem Google I/O 2012 App. Đó là mã nguồn mở và sử dụng ActionBarSherlock. Họ đã phát triển một phiên bản tương thích của ActionMode các lớp liên quan hoạt động tốt với ABS và trên các thiết bị trước tổ ong.

Đặc biệt, Hãy xem tại địa chỉ:

  • SessionsFragment lớp: Nó cho thấy việc sử dụng các phiên bản tương thích của ActionMode
  • util.actionmodecompat gói: Nó chứa các khả năng tương thích ActionMode lớp

Về cơ bản , giống như ABS, việc sử dụng ActionMode nguyên bản của họ khi nó có sẵn và dự phòng cho việc triển khai tùy chỉnh trên các thiết bị cũ hơn.

Hy vọng điều đó sẽ hữu ích!

+0

Thông tin của bạn thực sự hữu ích, cảm ơn. Tôi thấy tập tin này cũng hữu ích khi sử dụng ActionMode và ActionBarActivity từ gói v7 appcompat. http://iosched.googlecode.com/git/android/src/main/java/com/google/android/apps/iosched/ui/MultiSelectionUtil.java –

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