2015-10-06 19 views
6
Android Studio 1.4 

मेरे पास एक टूलबार है जो मैं अपने activity_main.xml में फुलाता हूं। मेरे पास main.xml नामक एक मेनू है जो उस पर प्रदर्शित होने के लिए केवल 1 आइकन है जो फुलाया जाता है।गतिविधि और खंड के लिए टूलबार पर विभिन्न मेनू विकल्प दिखाएं

जब उपयोगकर्ता एक टुकड़ा खोलने के लिए क्लिक करता है। मेरे पास एक और मेनू friends.xml है जिसमें 2 आइकन हैं।

जब मैं खंड में दोस्तों मेनू को फुलाता हूं तो यह अभी भी main.xml मेनू से आइकन प्रदर्शित करता है।

मैंने सोचा कि टूलबार पर एक नया मेनू बढ़ाने से मौजूदा मेनू को हटा दिया जाएगा।

यह main.xml मेनू का एक स्क्रीनशॉट है। खोज आइकन enter image description here

यह खंड का स्क्रीनशॉट है जैसा कि आप देख सकते हैं कि आइकन अभी भी वहां है।

enter image description here टूलबार के साथ activity_main.xml शामिल

<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> 

यहाँ 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); 
    } 

में मेनू बनाने और मेरे टुकड़ा में मैं इस किया है, जैसा कि आप देख सकते हैं मैं कर रहा हूँ के लिए मेरे कोड है दोस्तों.एक्सएमएल मेनू को फुलाएं।

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

किसी भी सुझाव के लिए बहुत धन्यवाद,

+0

"मैंने सोचा था कि उपकरण पट्टी पर एक नया मेनू बढ़ा-चढ़ाकर मौजूदा मेनू हटा" इस मान्य नहीं है, कुल मेनू आइटम = MenuItemsOfActivity + MenuItemsOfFragment – QAMAR

+0

बस ले जाने के ' @ ओवरराइड सार्वजनिक बूलियन ऑन क्रिएटऑप्शनमेनू (मेनू मेनू) { getMenuInflater()। Inflate (R.menu.main, मेनू); सुपर वापसी।onCreateOptionsMenu (मेनू); } 'फर्स्टफ्रैगमेंट के अंदर और फर्स्टफ्रैगमेंट्स ऑनक्रेट() के अंदर सेट हैसऑप्शनमेनू (सत्य) करें। यह – Droidwala

+0

काम करना चाहिए गतिविधि के अंदर मेनू को फुलाए जाने की कोई आवश्यकता नहीं है .. इसे टुकड़े के अनुसार करें – Droidwala

उत्तर

11

के सुझाव showing.or पालन के लिए उतना ही मैं तुम्हें onCreateOptionsMenu() के साथ ऐसा कर सकते हैं अगर यकीन नहीं है। मुझे लगता है कि आपकी बेहतर शर्त onPrepareOptionsMenu() होगी।

आप फ्रैगमेंट के onResume() में getActivity().invalidateOptionsMenu() लिखकर विकल्प मेनू को रीफ्रेश करने के लिए एंड्रॉइड को मजबूर कर सकते हैं।

तो अपने onPrepareOptionsMenu() दिखेगा की तरह:

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

इस तरह से मैंने इसे हल किया जैसा लगता है बहुत साफ। एक जादू की तरह काम किया। धन्यवाद। – ant2009

3

स्टोर एक चर में menu संदर्भ।

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); 
     } 

जब उल्लेख किए गए खंड को प्रतिस्थापित करते हैं तो निम्न कार्य करें।

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

मेनू आईडी के साथ hideOption() पर कॉल करें। पूर्व के लिए,

hideOption(R.id.action_search); 

और #Droidwala

संबंधित मुद्दे