टुकड़े के अंदर onCreateOptionsMenu


182

मैंने setHasOptionsMenu(true)अंदर रखा है onCreateView, लेकिन मैं अभी भी onCreateOptionsMenuटुकड़ों के अंदर कॉल नहीं कर सकता ।

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

नीचे मेरा onCreateOptionsMenuकोड है।

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

त्रुटि संदेश मुझे मिलता है:

onCreateOptionsMenu(Menu)फ्रैगमेंट प्रकार की विधि को सुपरटाइप विधि को ओवरराइड या कार्यान्वित करना चाहिए।


1
'SetHasOptionsMenu (सच)?' के लिए धन्यवाद, मैं उस की तलाश कर रहा था।
फैब्रिकियो PH

जवाबों:


497

इसे इस्तेमाल करे,

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

और onCreateविकल्पों को अपने में प्रकट करने के लिए इस पंक्ति को जोड़ेंToolbar

setHasOptionsMenu(true);

182
यदि आप इस पंक्ति को नहीं जोड़ते हैं तो इसे कॉल नहीं किया जाएगा:setHasOptionsMenu(true);
Yoann Hercouet

10
OnCreateOptionsMenu () टुकड़ों के लिए गतिविधियों की तुलना में अलग-अलग तर्क हैं।
जॉर्ज

3
और यह भी एक अलग वापसी प्रकार के रूप में शून्य पर onCreateOptionsMenu () की गतिविधि के विपरीत शून्य से ऊपर के रूप में उल्लेख किया है।
डेक्सटर

4
दिलचस्प नोट: यदि आप अपनी गतिविधि में onCreateOptionsMenu को ओवरराइड करते हैं, तो दोनों विकल्प मेनू आइटम प्रदर्शित किए जाएंगे।
एडम जॉन्स

5
setHasOptionsMenu(true);onCreate()पूर्ण होने के लिए बुलाया जाना है।
Roel

21

आपके पास पहले से ही autogenerated फ़ाइल res / menu / menu.xml है जो action_settings को परिभाषित करता है

अपने MainActivity.java में निम्नलिखित तरीके हैं:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

onCreateView()अपने फ्रैगमेंट कॉल की विधि में:

setHasOptionsMenu(true); 

और इन 2 विधियों को भी जोड़ें:

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

अंत में, नई फ़ाइल res / menu / fragment_menu.xml को परिभाषित करें action_1 और action_2 जोड़ें

इस तरह जब आपका ऐप फ़्रैगमेंट प्रदर्शित करता है, तो उसके मेनू में 3 प्रविष्टियाँ होंगी:

  • एक्शन 1 रिस / मेन्यू / फ्रेग्नमेंट_मेनू.एक्सएमएल से
  • action_2 से रेस / मेनू / fragment_menu.xml
  • action_settings से रेस / मेनू / menu.xml

1
प्रश्न टुकड़ों के अंदर था, गतिविधि नहीं
OlivierM

2
@OlierierM जवाब खंड के मेनू की व्याख्या करता है। मैंने स्पष्टीकरण की सराहना की कि यह गतिविधि मेनू के साथ कैसे इंटरैक्ट करता है।
अरंडा

13

मैंने @Alexander Farber और @Sino Raj उत्तरों को आज़माया। दोनों उत्तर अच्छे हैं, लेकिन मैं अपने टुकड़े के अंदर onCreateOptionsMenu का उपयोग नहीं कर सका, जब तक मुझे पता नहीं है कि क्या गायब था:

मेरी गतिविधि में setSupportActionBar (टूलबार) को इस तरह जोड़ें:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

मुझे उम्मीद है कि यह उत्तर उसी समस्या वाले किसी व्यक्ति के लिए मददगार हो सकता है।


4

कॉल

setSupportActionBar(toolbar)

के भीतर

onViewCreated(...) 

खुशबू का

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}

1
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.