2013-01-11 23 views
28

Tôi chỉ muốn tinh chỉnh Chế độ xem của một MenuItem ActionBar theo mã.getActionView() của MenuItem của tôi trả lại null

Thật không may, có vẻ như getActionView luôn trả về giá trị rỗng!

Mã của tôi:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = this.getSupportMenuInflater(); 
    inflater.inflate(R.menu.folder, menu); 
    return super.onCreateOptionsMenu(menu); 

} 

public boolean onPrepareOptionsMenu(final Menu menu) { 
    MenuItem menuFolder = menu.findItem(R.id.menu_folder); 
    Log.i("", "* onPrepareOptionsMenu *" + menuFolder); 
    Log.i("", "* getActionView *" + menuFolder.getActionView()); 

Log là:

01-11 22: 13: 42,884: I/(7893): * onPrepareOptionsMenu * com.actionbarsherlock.internal.view. [email protected]

01-11 22: 13: 42,884: I/(7893): * getActionView * rỗng

Cảm ơn rất nhiều sự giúp đỡ nào

Edit:

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

    <item 
      android:id="@+id/menu_folder" 
      android:icon="@drawable/ic_menu_archive" 
      android:showAsAction="always"/> 
</menu> 
+0

Vui lòng hiển thị 'R.menu.folder'. –

+0

được thêm vào câu hỏi –

Trả lời

28

getActionView() chỉ hoạt động nếu có một ActionView tùy chỉnh từ setActionView.

+6

Có cách nào khác để truy cập chế độ xem của MenuItem không? –

+0

Phụ thuộc. Bạn có muốn tinh chỉnh chỉ nút này hoặc tất cả các nút không? Nếu nó chỉ là nút này, bạn có lẽ nên đặt chế độ xem tùy chỉnh. Nếu tất cả các nút của nó, bạn có lẽ nên sử dụng phong cách nếu có thể. Bạn đang cố gắng thực hiện những thay đổi nào? –

+2

Tôi muốn đặt "huy hiệu" lên biểu tượng khi có nội dung mới trong ứng dụng, vì vậy tôi cần Chế độ xem để thêm bộ đếm nhỏ này –

25

Đối với tôi giải pháp hoạt động là sử dụng ứng dụng không gian tên thay vì android.

app:actionViewClass="android.support.v7.widget.SearchView"

Đừng quên khai báo nó: xmlns:app="http://schemas.android.com/apk/res-auto"

+0

Bạn cũng có thể sử dụng thuộc tính actionLayout để đặt Bố cục tùy chỉnh. Trong trường hợp của tôi, tôi đã sử dụng một Spinner mà tôi đã xác định trong xml của chính nó. –

21

bạn nên sử dụng

app:actionLayout="@layout/menu_actionbar_basket" 

thats lừa nếu bạn sử dụng

android:actionLayout="@layout/menu_actionbar_basket" 

bạn sẽ luôn nhận được null ngoại lệ trong thanh công cụ mặc định.

+0

cảm ơn @Smartiz, bạn tiết kiệm thời gian của tôi;) – immodi

3

Nếu bản dựng gỡ lỗi của bạn đang hoạt động mà không có bất kỳ sự cố và sự cố nào chỉ với bản phát hành bản phát hành thì điều này có thể do cấu hình của trình bảo vệ. Nếu bạn đã bật proguard trong ứng dụng của mình thì hãy thêm dòng dưới đây vào proguard-rules.pro

-keep class android.support.v7.widget.SearchView { *; }