2010-07-17 27 views
28

Tôi có 10-15 hoạt động trong dự án của mình. Tôi muốn có menu tùy chọn chủ yếu trong tất cả các Hoạt động. Sau đó là bất kỳ cách nào chúng ta có thể làm ở một nơi và nó xuất hiện trong mọi hoạt động.Menu tùy chọn tương tự trong tất cả Hoạt động trong Android

Ngoài ra, tôi cũng muốn ẩn menu tùy chọn trong một số. Vì vậy, là nó có thể hoặc tôi phải viết mã menu tùy chọn trong tất cả các hoạt động.

Trân

Sunil

Trả lời

50

Tạo một Class (nói BaseActivity) mở rộng hoạt động, và ghi đè onCreateOptionsMenuonOptionsItemSelected chức năng.

public class BaseActivity extends Activity { 

    // Activity code here 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.options_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.item: 
       // do what you want here 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

Bây giờ, trong 15-16 hoạt động khác, thay vì mở rộng một hoạt động, bạn nên mở rộng BaseActivity.

public class FooActivity extends BaseActivity { 

    // Activity code here 

} 

Bằng cách này, tất cả các hoạt động của bạn đều lấy được menu tùy chọn. Đối với các hoạt động mà bạn muốn menu tùy chọn bị tắt, bạn có thể ghi đè lại nó trong hoạt động cụ thể đó.

public class BarActivity extends BaseActivity { 

    // Activity code here 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Do Nothing 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Do Nothing 
    } 
} 

Hy vọng nó không cung cấp cho bạn sự cố trong tệp kê khai.

+0

Ngay cả khi tôi nghĩ về điều đó nhưng tôi đã có một customactivity để cài đặt trên thanh tiêu đề trong mọi hoạt động. Sẽ thử thực hiện nó trong chính nó. – sunil

+0

có, vui lòng làm, nó phải hoạt động. Đồng thời báo cáo kết quả của bạn. :) – st0le

+0

Liệu nó có hoạt động không? Không ai báo cáo kết quả: c –

3

Giải pháp cho vấn đề này là trong hoạt động mới của bạn, thêm phương thức menu này.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_home_page, menu); 
    menu.removeItem(R.id.logout); 
    return true; 
} 

Trong mỗi hoạt động, phương pháp này sẽ tự động xuất hiện.

Nếu không, hãy thêm nó bằng lệnh gọi inflate. Nó đòi hỏi hai tham số, một tài nguyên xml (cùng một tài nguyên mà bạn đã sử dụng trong hoạt động ban đầu) và đối tượng trình đơn được chuyển vào phương thức onCreateOptionsMenu.

menu.removeItem sẽ xóa mục menu của bất kỳ id tài nguyên nào bạn chuyển vào nó. Tôi hy vọng điều này sẽ giúp những người đang đối mặt với vấn đề này.

Cảm ơn bạn và sẵn lòng chia sẻ bài đăng này.

1

Nó là không đủ để chỉ cần mở rộng BaseActivity, bạn cũng phải gọi super.onCreateOptionsMenu(menu)super.onOptionsItemSelected(item) như thế này trong các hoạt động khác của bạn:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    //getMenuInflater().inflate(R.menu.menu_second, menu); <- remove this 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return super.onOptionsItemSelected(item); 
} 
+0

getMenuInflater(). Inflate (R.menu.menu_second, menu); // <- Bạn nên loại bỏ điều này –

+0

Điều này làm cho tùy chọnMenu biến mất ...? –

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