2015-10-06 69 views
6
Android Studio 1.4 

Tôi có Thanh công cụ mà tôi tăng cao trong activity_main.xml. Tôi có một menu có tên là main.xml được tăng thêm chỉ có 1 biểu tượng để hiển thị trên đó.Hiển thị các tùy chọn menu khác nhau trên Thanh công cụ cho hoạt động và phân đoạn

Khi người dùng nhấp để mở một đoạn. Tôi có một menu khác friends.xml có 2 biểu tượng.

Khi tôi thổi phồng menu bạn bè trong đoạn, nó vẫn hiển thị biểu tượng từ menu main.xml.

Tôi nghĩ rằng việc tăng cường một menu mới trên thanh công cụ sẽ xóa menu hiện tại.

Đây là ảnh chụp màn hình của menu main.xml. Biểu tượng tìm được hiển thị enter image description here

Đây là ảnh chụp màn hình của đoạn như bạn có thể thấy biểu tượng tìm vẫn còn đó.

enter image description here activity_main.xml với thanh công cụ bao gồm

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/tbMain" 
      layout="@layout/app_bar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clickable="true"/> 
    </LinearLayout> 
</android.support.v4.widget.DrawerLayout> 

đây là mã của tôi cho tạo menu trong MainActivity.java

private void setupToolBar() { 
     mToolbar = (Toolbar)findViewById(R.id.tbMain); 
     setSupportActionBar(mToolbar); 

     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

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

Và trong đoạn của tôi, tôi có điều này, như bạn có thể nhìn thấy tôi thổi phồng menu friends.xml.

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

Rất cám ơn cho bất cứ đề nghị,

+0

"Tôi nghĩ rằng lạm phát một menu mới trên thanh công cụ sẽ loại bỏ menu hiện" này là không hợp lệ, tổng Menu Items = MenuItemsOfActivity + MenuItemsOfFragment – QAMAR

+0

chỉ di chuyển ' @Override công khai boolean onCreateOptionsMenu (Menu trình đơn) { getMenuInflater(). Inflate (R.menu.main, menu); trả lại siêu.onCreateOptionsMenu (menu); } 'bên trong FirstFragment và làm setHasOptionsMenu (true) bên trong của OnFreatment onCreate() .. Điều này sẽ làm việc – Droidwala

+0

Không cần phải tăng cường menu bên trong hoạt động .. chỉ cần làm nó fragment khôn ngoan – Droidwala

Trả lời

11

Tôi không chắc chắn nếu bạn có thể làm điều này với onCreateOptionsMenu(). Tôi nghĩ rằng đặt cược của bạn tốt hơn sẽ là onPrepareOptionsMenu().

Bạn có thể buộc Android làm mới menu tùy chọn bằng cách chỉ cần viết getActivity().invalidateOptionsMenu() trong Fragment's onResume().

Vì vậy onPrepareOptionsMenu() của bạn sẽ trông giống như:

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    menu.clear(); //remove all items 
    getActivity().getMenuInflater().inflate(R.menu.menu_fragment, menu); 
} 
+0

Đây là cách tôi giải quyết nó như nó có vẻ là rất sạch sẽ. Làm việc như người ở. Cảm ơn. – ant2009

3

Store menu tham chiếu trong một biến.

private Menu menu; 

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

Khi thay thế cho đoạn đã đề cập, hãy làm như sau.

private void hideOption(int id) { 
     menu.findItem(id).setVisible(false); 
    } 

Gọi hideOption() với id trình đơn. cho ex,

hideOption(R.id.action_search); 

Và ngược lại cho showing.or theo đề nghị của #Droidwala

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