2011-12-12 23 views
12

Tôi có bố cục có 2 đoạn. Những mảnh này sử dụng cùng một trình đơn, bởi vì tôi có một bố trí khác chỉ có một trong số những cái này (được sử dụng trong thiết bị màn hình nhỏ).Các phân đoạn, với cùng một menu, trên cùng một bố cục gây ra menuitem trùng lặp

Vấn đề của tôi là các mục menu của từng đoạn hiển thị trong trình đơn và vì chúng nằm trong cùng một menu, chúng được sao chép với nhau. Tôi cần hiển thị menu duy nhất từ ​​một đoạn, không phải cả hai. Có anyway tôi có thể lưu trữ này?

Hoặc, có thể tốt hơn, tạo 2 menu khác nhau. Một cho các bố trí có một trong những phân đoạn một mình (được sử dụng trong thiết bị màn hình nhỏ), và một bố cục khác cho bố trí có cả hai mảnh. Làm thế nào tôi có thể làm điều này?

Chỉnh sửa: Tôi sử dụng thư viện ActionBarSherlock để tương thích ngược và thử nghiệm trên trình mô phỏng Android 3.0.

Trả lời

0

bạn có gọi phương thức siêu của createOptionMenu không?

  • thì có thể xảy ra rằng tất cả menu tùy chọn được hiển thị.
+0

Có, createOpionMenu của siêu được gọi. –

+0

sau đó không gọi phương thức siêu :) – alosdev

+4

điều đó sẽ làm trầm trọng thêm vấn đề, tôi nghĩ ;-) –

21

Tôi đã tìm thấy giải pháp không tốt. Trong onCreateOptionsMenu() của từng đoạn, hãy gọi menu.clear() để xóa bất kỳ mục menu hiện có nào trước khi thổi phồng menu.

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.clear(); 
    inflater.inflate(R.menu.main, menu); 
    super.onCreateOptionsMenu(menu, inflater); 

} 

Điều này sẽ đăng các vấn đề trong tương lai. Tôi có thể quyết định sử dụng các menu khác nhau cho từng đoạn, mỗi menu chia sẻ các mục menu. Tôi nghĩ rằng chúng ta có thể thao tác menu tại onCreateOptionsMenu(), nhưng hiện tại tôi không biết làm thế nào để có được mục trình đơn liên kết với phân đoạn trước khi thổi nó với MenuInflater.

+0

Bạn đã bao giờ tìm ra giải pháp cho điều này chưa? Tôi hiện đang chạy vào này, là tốt. –

+0

Điều này .... làm việc cho tôi .. huh .... –

+0

nullpointerexception tại onPrepareOptionsMenu của FragmentActivity.Xin vui lòng thông báo – Umesh

2

Tôi trễ nhưng có thể nó có thể giúp người khác. Điều này nghe có vẻ giống như một mùi thiết kế (nếu thuật ngữ này tồn tại).

Nếu cả hai mảnh có cùng mục menu và không quan trọng mục nào của phân đoạn được sử dụng (nghĩa là bạn không nhấp vào mục 1 của đoạn A hoặc mục 1 đoạn B), có thể trình đơn không nên là một phần của đoạn, nhưng của hoạt động. Điều đó sẽ giải quyết sự trùng lặp.

+0

Sự cố trùng lặp cũng xảy ra khi cấu hình được thay đổi và có sự tương tác chi tiết hơn với ActionBar sẽ cực kỳ hữu ích .. đây không chỉ là vấn đề về mùi thiết kế. – dcow

+0

Có, một trường hợp phổ biến là hành động xóa phải xuất hiện cho cả menu dài báo chí trên danh sách chính và màn hình chi tiết cho một mục. Mục menu của thanh hành động chỉ nên được điền bởi đoạn chi tiết trong khi mục menu báo chí dài chỉ hiển thị khi được nhấn lâu. – Monstieur

0

Tôi tìm thấy một công việc xung quanh, nó hoạt động cho tôi. Trong phương pháp onOptionsItemSelected, lần đầu tiên tôi làm kiểm tra của nó nếu lớp tương đương của nó hay không đến lớp tôi nhận được từ fragmentManager với findFragmentById (R.id.content_frame) .getClass()

tôi có cái gì đó như

này
@Override 
    public boolean onOptionsItemSelected(MenuItem item) {   
     if(this.class != getFragmentManager().findFragmentById(R.id.content_frame).getClass()) { 
      return false; // must do nothing 
     } 
     // do your menu stuff 
    } 
Các vấn đề liên quan