2012-03-02 73 views
25

Khi cố gắng tuân theo Nguyên tắc thiết kế của Android, tôi đang chạy vào một tình trạng khó khăn nhỏ.Thanh tác vụ theo ngữ cảnh tương thích với Android

Tôi muốn có danh sách các mục mà tôi có thể nhấn và giữ một số (đa lựa chọn) và sau đó thực hiện các tác vụ hàng loạt trên chúng.

Nguyên tắc thiết kế đề xuất sử dụng Thanh tác vụ theo ngữ cảnh cho điều này và âm thanh đó hoàn toàn giống với những gì tôi nghĩ. Vấn đề là, tôi đang cố gắng duy trì khả năng tương thích ngược với API 7 (do điện thoại của tôi hiện đang là 2.3.3).

Tôi đang sử dụng ActionBarSherlock để có các công cụ hành động khác, nhưng tôi không thể tìm ra cách làm cho nó kích hoạt thanh tác vụ theo ngữ cảnh hoặc tôi không biết cách thêm nút tùy ý ActionBar trong ABS. Tôi thấy bạn có thể làm các tab, vì vậy có lẽ đó là câu trả lời, nhưng vì tôi đang cố gắng cho phép chọn nhiều, tôi không muốn có menu ngữ cảnh bình thường.

+0

Xin chào bạn đã kiểm tra mã nguồn mẫu, cũng có các mẫu thêm nút, nút theo ngữ cảnh ..etc https://github.com/JakeWharton/ActionBarSherlock/tree/master/samples/demos –

+2

Vâng, tôi đã xem các lớp trong thư mục đó, tôi không thấy các ví dụ bạn đang nói đến. Các ví dụ duy nhất tôi thấy về việc thêm những thứ được thực hiện trong bước tạo OptionsMenu, nhưng tôi đang tìm cách thực hiện nó để đáp ứng với một cú nhấp chuột dài vào một mục (một cách hợp lý một điều theo ngữ cảnh). Bạn có thể cho tôi biết cụ thể những gì tập tin bạn nhìn thấy nó trong? – Paul

+0

Đó là cách tôi làm cho nó hoạt động http://stackoverflow.com/questions/14737519/implementing-multi-selection-and-contextual-actionmode-in-actionbarsherlock/14737520#14737520 –

Trả lời

16

Thiết lập actionbar theo ngữ cảnh là như nhau để thiết lập các mục 'thường xuyên' ActionBar như xa như XML là có liên quan. This example in the developer's guide explains it all.

Để sử dụng ActionBarSherlock, thay thế cuộc gọi lại Android mặc định thành callbacks ActionBarSherlock (ví dụ thay vì Android.View.ActionMode, sử dụng com.actionbarsherlock.view.ActionMode).

+1

không gian tên đó không tồn tại, theo như tôi có thể nói. – Paul

+2

Bạn đang sử dụng v4.0 của ActionBarSherlock? Nó đã được rút ra khỏi phiên bản beta tuần trước. – Reinier

+0

Nâng cấp lên 4.0 sẽ thêm các không gian tên bạn đang thiếu. – Reinier

1

Đối với mẫu nhấp chuột dài, vui lòng tham khảo các liên kết bên dưới. Đầu tiên là mã java cần thiết cho mẫu. Và thứ hai là cách xác định bố cục;

+1

Điều đó không liên quan gì đến câu hỏi của tôi. Ví dụ đó là cách hiển thị menu ngữ cảnh từ một đoạn. Tôi đang cố gắng để nhân rộng các Contextual Action Bar từ các API hiện hành hơn. – Paul

0

Tôi sẽ trả lời phần thứ hai của câu hỏi của bạn. Dưới đây là một ví dụ làm thế nào để thêm bất kỳ Xem dụ (nút trong các mã dưới đây) actionbar với thư viện ActionBarSherlock:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

     refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null); 
     refreshButton.setOnClickListener(refreshButtonListener); 

     MenuItem item = menu.add(0, android.R.id.copy, 0, getString(R.string.actionbar_refresh)); 
     item.setActionView(refreshButton); 
     item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_activity_action_bar, menu); 
} 
+0

Có, tôi đã làm điều đó trước đây, nhưng điều đó làm cho nó hiển thị trên thanh hành động mọi lúc cho hoạt động đó. Những gì tôi đang cố gắng làm chỉ hiển thị nút sau khi các mục được chọn trong danh sách và cập nhật sau mỗi mục được chọn. – Paul

0

Tôi đang đối mặt với cùng một vấn đề. Nó đã được giải quyết khi tôi tìm thấy this link. Về cơ bản, bạn phải tạo một lớp gọi lại thực hiện ActionMode.Callback. Trong lớp này, bạn thổi phồng Thanh Hành động bằng Thanh Hành động theo ngữ cảnh của bạn. Tại mỗi lựa chọn (hoặc bấm dài), bạn bắt đầu gọi lại bằng cách sử dụng phương thức startActionMode. Xem các liên kết cho một mã làm việc =]

EDIT: Ngoài ra còn có một ví dụ về mẫu Sherlock dưới /samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java

22

Đây là một câu trả lời muộn, nhưng tôi nghĩ rằng sẽ giúp mọi người bị mắc kẹt.

Mở thanh hành động theo ngữ cảnh thực sự là khá đơn giản, tại bất kỳ điểm nào trong hoạt động của bạn, bạn chỉ cần gọi:

startActionMode(mActionModeCallback); 

Nếu bạn không phải là hoạt động chính của bạn, giống như trong mảnh vỡ, bạn có thể có được một tài liệu tham khảo với

getSherlockActivity().startActionMode(mActionModeCallback); 

và đây là callback

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){ 

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      MenuInflater inflater = mode.getMenuInflater(); 
      inflater.inflate(R.menu.actionbar_context_menu, menu); 
      return true; 
     } 

    @Override 
    public void onDestroyActionMode(ActionMode mode) { 

    } 

    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.menu_item1: 
       return true; 
      case R.id.menu_item2: 
       //close the action mode 
       //mode.finish(); 
       return true; 
      default: 
       mode.finish(); 
       return false; 
     } 
    } 
}; 

các xml là một menu đơn giản như actionbar một:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@+id/menu_item1" 
     android:icon="@drawable/ic_item1" 
     android:title="@string/ITEM1" 
     android:showAsAction="always|withText" /> 

<item android:id="@+id/menu_item2" 
     android:icon="@drawable/ic_item2" 
     android:title="@string/ITEM2" 
     android:showAsAction="always|withText" /> 

+1

Wow awnser đẹp, đã truggled với điều này trong một vài giờ! công việc tuyệt vời – Francois

2

ActionBarSherlock có thực hiện riêng của mình ActionMode, nhưng bạn sẽ phải manualy controll lifesycle của nó, tôi đã viết một tutorial về việc này.

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