में दो बार बुलाया गया है मेरे पास विकल्प मेनू के साथ एक सरल अनुप्रयोग है, जो टुकड़ों की शुरुआत में बदल रहा है। समस्या यह है कि शुरुआत में किसी भी टुकड़े को क्रिएटऑप्शनमेनू() को छोड़कर दो बार कहा जाता है - ऑनक्रेट() और रीज़्यूम() के बाद। ऑनक्रेट() में मैं इसे setHasOptionsMenu (true) के माध्यम से मैन्युअल रूप से कॉल करता हूं, लेकिन बाद में() पर ऐसा नहीं होना चाहिए। इसके अलावा, यह केवल पहला खंड शुरू होने के बाद होता है।ऑनक्रेटऑप्शनमेनू() को फ्रैगमेंट
class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle clicks
return true;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Create a menu
super.onCreateOptionsMenu(menu, inflater);
}
}
और गतिविधि में बदल रहा है टुकड़े कोड:
यहाँ आधार टुकड़े कोड है
public void startFragment(BaseFragment fragment) {
getSupportFragmentManager()
.beginTransaction()
.replace(android.R.id.content, fragment)
.commit();
}
नमूना ActionBarSherlock, केवल SupportLibrary की तरह किसी भी बाहरी पुस्तकालय का उपयोग नहीं करता। मुझे लगता है कि समस्या FragmentTransaction() विधि में है, क्योंकि यह पहला टुकड़ा शुरू होने पर ठीक काम करता है। लेकिन मुझे नहीं पता, समस्या को हल करने के लिए कहां शुरू करें। मुझे दृश्य में खंड को बिल्कुल ठीक करने की ज़रूरत है।
आप किस फोन का उपयोग कर रहे हैं? अगर फोन में समर्पित मेनू बटन है, तो क्रिएटऑप्शनमेनू केवल तभी लागू किया जाएगा जब उपयोगकर्ता उस पर क्लिक करेगा। ऐड-ऑन करने के लिए यह अनिवार्य नहीं है कि setHasOptionsMenu (true) को CreateOptionsMenu पर कॉल करना चाहिए। यह सिर्फ ढांचे को सूचित करता है कि मेनू पॉप्युलेट करने पर खंड भाग लेना चाहेगा। – prijupaul
ओपी मुझे एक ही समस्या होने पर प्रश्न जोड़ने/संपादित करने की अनुमति नहीं देता है। मुझे मेनू के बारे में मूलभूत सामान पता है, समस्या ओपी की तरह अजीब है। संपादित करें: मैं नेस्टेड टुकड़े का उपयोग कर रहा हूं – Zyoo
@prijupaul यह वास्तव में केवल पूर्व-हनीकॉम संस्करणों के लिए है। हनीकॉम पर और बाद में क्रिएटऑप्शनमेनू को सेटहासप्शनमेनू() पर कॉल करने के तुरंत बाद बुलाया जाएगा। – bvitaliyg