6

मैं एंड्रॉइड के लिए शुरुआत कर रहा हूं और मैं छोटे एंड्रॉइड एप्लिकेशन का विकास कर रहा हूं। मेरे आवेदन में मैं शेरलॉक लाइब्रेरी का उपयोग कर रहा हूं। मेरे आवेदन में एक मुख्य गतिविधि और दो टुकड़े हैं। मेरी सूची में टुकड़ा संरचना के पर लग रहा हैonCreateOptionsMenu पर पहले कहा जाता है क्रिएट एंड्रॉइड

public class MyCards extends SherlockListFragment 
     { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside fragment on create"); 

    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on activity created"); 
    } 

    private void displayCards(int type) { 

     Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside display cards"); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.mycards, container, false); 

     View view1 = inflater.inflate(R.layout.empty_card, container, false); 
     return view; 

    } 

    /*@Override 
    public void onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 

    optionsMenu = menu; 
    }*/ 

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu_type2, menu); 

     Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on create option menu"); 
     Spinner spinner = (Spinner) menu.findItem(R.id.cardType) 
       .getActionView(); 

     SpinnerAdapter adapter = ArrayAdapter.createFromResource(getSherlockActivity().getSupportActionBar().getThemedContext(), R.array.card_action_list,android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); // set the adapter 

     spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int pos, long id) { 
       displayCards(pos); 
       Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on option selected"); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       displayCards(0); 
       Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on no option selection"); 
      } 

     }); 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside option select listener"); 

    } 

} 

अब की तरह मेरी समस्या यह है कि जब मैं पहली बार के लिए एक और टुकड़ा करने के लिए इधर-उधर एक टुकड़ा स्विच यह निम्नलिखित लॉग उत्पादन

01-04 00:54:06.997: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on create option menu 
01-04 00:54:06.997: W/KeyCharacterMap(2575): No keyboard for id -1 
01-04 00:54:06.997: W/KeyCharacterMap(2575): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
01-04 00:54:07.020: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside fragment on create 
01-04 00:54:07.036: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on activity created 

कि विकल्प बनाने पर मतलब देता है ऑनफैगमेंट बनाने और गतिविधि बनाने पर पहले कहा जाता है। और यह दो चेतावनी भी दे रहा है। यह किसी भी त्रुटि के साथ काम करते हैं। लेकिन मैं इसे लॉग उत्पादन

02-07 10:05:10.983: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on create option menu 
02-07 10:05:11.023: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside fragment on create 
02-07 10:05:11.043: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on activity created 
02-07 10:05:11.113: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside display cards 
02-07 10:05:11.133: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on option selected 

इस बार यह किसी भी चेतावनी दे नहीं कर रहा है और ठीक से काम कर निम्नलिखित देता है अब मेरी सूची दृश्य

प्रदर्शित करने के लिए जब मैं फिर से (दूसरी बार) एक ही टुकड़ा करने के लिए स्विच कर पा रहा हूँ। मेरी सूची दृश्य भी प्रदर्शित करना। लेकिन पहली बार यह ठीक से काम नहीं कर रहा है .. एक और मुद्दा यह है कि जब मैंने इसे एंड्रॉइड के उच्च संस्करण पर चलाया तो यह ठीक काम कर रहा था। लेकिन अगर मैं 2.3.3 की तरह एंड्रॉइड के निचले संस्करण पर चला गया तो मैं इस तरह के व्यवहार दिखाता हूं .. मैंने इस ListFragment onPrepareOptionsMenu called before onCreate. Why and How to Fix/Bypass? के बारे में पढ़ा लेकिन मैं इस समस्या को हल करने में सक्षम नहीं हूं।

अगर मैं परिभाषित setHasOptionsMenu(true)onActivityCreated अंदर यह उत्पादन

01-04 03:32:38.622: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside fragment on create 
01-04 03:32:38.653: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on activity created 
01-04 03:32:38.692: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on create option menu 
01-04 03:32:38.700: W/KeyCharacterMap(8157): No keyboard for id -1 
01-04 03:32:38.700: W/KeyCharacterMap(8157): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 

मैं अपने टुकड़ा जहां वास्तविक टुकड़ा लेन-देन से नीचे की तरह जगह लेता है के लिए setHasOptionsMenu सेट करने की कोशिश की निम्नलिखित देता है ..

@Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      MyCards mc = new MyCards(); 
      mc.setHasOptionsMenu(true); 
      ft = mActivity.getSupportFragmentManager().beginTransaction(); 

       mFragment = Fragment.instantiate(mActivity, mClass.getName(), 
         mArgs); 

       ft.add(android.R.id.content, mFragment, mTag); 
       ft.commit(); 
      } 

और अभी भी यह एक ही समस्या दे रहा है।

मेरे कोड या कुछ और चीज़ के साथ कोई समस्या? तो इस समस्या को हल करने के लिए कैसे करें। की आवश्यकता है ... धन्यवाद ...

+0

क्या आप वाकई ऐसा नहीं कर रहे हैं क्योंकि आप क्रेट में लॉगिंग करने से पहले 'setHasOptionsMenu' को कॉल कर रहे हैं? – Zharf

+0

हाय zharf उत्तर के लिए धन्यवाद। मेरा संपादित प्रश्न देखें .. और लॉग आउटपुट बदल दिया .. लेकिन यह मेरी समस्या को हल नहीं कर रहा है .. – nilkash

उत्तर

1

मैं क्यों यह है कि तरह काम करता है पता नहीं है, लेकिन ऐसा करते हैं: सेट विकल्प setHasOptionsMenu(true) अपनी गतिविधि में जब आप इसे करने के लिए अपने टुकड़ा जोड़ रहे हैं।

उदाहरण के लिए:

//Activity class 
YourListFragment f = new YourListFragment(); 

f.setHasOptionsMenu(true); //here 

getSupportFragmentManager().beginTransaction() 
.add(R.id.your_list_fragment_container, f).commit(); 

और अपने टुकड़ा के कोड में यह स्थापित करने को हटा दें। यह मेरे लिए काम किया।

+0

हाय मिचल त्वरित उत्तर के लिए धन्यवाद .. मैंने आपको आर समाधान की कोशिश की। मेरे आवेदन में मैं टैब का उपयोग कर रहा हूँ। मेरे ontabselected विधि में मैंने आपके समाधान की कोशिश की लेकिन यह मेरे लिए काम नहीं कर रहा है। मैंने निम्नलिखित तरीके से प्रयास किया। 'MyCard my_card = new MyCards() 'और' my_card.setHasOptionsMenu (true)' .... लेकिन यह काम नहीं कर रहा है। यह विधि मेरे लिए एंड्रॉइड के नवीनतम संस्करण पर भी काम नहीं करती है। कोई अन्य समाधान। मदद के लिए धन्यवाद ... – nilkash

+0

क्या आप इस विधि का काम भी नहीं करते हैं? यह एंड्रॉइड 2.3 पर 4.2 के रूप में ठीक है मेरे लिए काम कर रहा है। –

+0

हाय मिचल उत्तर के लिए धन्यवाद। मैंने 2.3.3 और आईआईसी संस्करण पर कोशिश की लेकिन यह काम नहीं कर रहा है ... क्या मेरे कोड में कुछ गड़बड़ है ... मदद चाहिए। – nilkash

28

onActivityCreated(Bundle savedInstanceState) विधि में लिखें।

+3

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – Horacio

+0

यह मेरे लिए काम करता है! – JaredLuo

+3

तर्क: कुछ संस्करणों के लिए, समर्थन लाइब्रेरी तुरंत setHasOptionsMenu (true) को कॉल करने पर मेन्यूबार बनायेगी ... यह संभवतः त्रुटियों का कारण बन सकती है यदि उदाहरण के लिए, पहले से ही फुलाए जाने के लिए लेआउट की आवश्यकता है, या कुछ आवृत्ति चर की आवश्यकता है फुलाए गए लेआउट से। – chaqke