नेविगेशन ड्रॉअर का उपयोग करते समय एंड्रॉइड देवता अनुशंसा कर रहे हैं कि एक्शनबेर में "केवल उन स्क्रीन जिन्हें नेविगेशन ड्रॉअर में दर्शाया गया है, वास्तव में नेविगेशन ड्रॉअर छवि होनी चाहिए" और "सभी अन्य स्क्रीन में पारंपरिक अप कैरेट है।"
विवरण के लिए यहां देखें: http://youtu.be/F5COhlbpIbY
मैं कई स्तरों के टुकड़ों को नियंत्रित करने के लिए एक गतिविधि का उपयोग कर रहा हूं और सभी स्तरों पर प्रदर्शन और कार्य करने के लिए नेविगेशन दराज छवि प्राप्त कर सकता हूं।
निचले स्तर के टुकड़े बनाते समय मैं ActionBarDrawerToggle setDrawerIndicatorEnabled(false)नेविगेशन ड्रॉअर छवि को छिपाने के लिए कॉल कर सकता हूं और अप कैरट प्रदर्शित किया जा सकता है
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
समस्या यह है कि जब मैं शीर्ष स्तर के टुकड़ों पर वापस जाता हूं, तो ऊपर कैरेट अभी भी मूल नेविगेशन दराज छवि के बजाय दिखाता है। नेविगेशन दराज छवि को फिर से प्रदर्शित करने के लिए शीर्ष स्तर के टुकड़ों पर एक्शनबेर को "ताज़ा" करने के तरीके पर कोई सुझाव?
उपाय
टॉम के सुझाव ने मेरे लिए काम किया। यहाँ मैंने क्या किया है:
मुख्य गतिविधि
यह गतिविधि ऐप में सभी अंशों को नियंत्रित करती है।
दूसरों को बदलने के लिए नए टुकड़े तैयार करते समय, मैंने setDrawerIndicatorEnabled(false)इस तरह से ड्राअरटॉगल सेट किया :
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
आगे, एक ओवरराइड में onBackPressed, मैंने setDrawerIndicatorEnabled(true)इस तरह से ड्राअरटॉगल सेट करके ऊपर रिवर्ट किया :
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
लोअर लिवेलफ्रैगमेंट्स में
टुकड़ों में मैंने संशोधित किया onCreateऔरonOptionsItemSelected इस तरह :
में onCreateजोड़ा setHasOptionsMenu(true)विकल्प मेनू को विन्यस्त सक्षम करने के लिए। एक्शनबार में <setDisplayHomeAsUpEnabled(true) को सक्षम करने के लिए भी सेट करें :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
फिर onOptionsItemSelectedजब भी < दबाया जाता है तो यह onBackPressed()गतिविधि से कॉल करता है पदानुक्रम में एक स्तर को ऊपर ले जाता है और नेविगेशन उपयोगकर्ता को दिखाता है:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}
.replace(R.id.frag_layout। यदि यह एक और अधिक पदानुक्रम स्तर है, तो मुझे उम्मीद है कि आप .addइसे बैकस्टैक करेंगे।
theDrawerToggle.setDrawerIndicatorEnabled(false);खंड के अंदर का संदर्भ कैसे लेते हो ? मुझे लगता है कि यह मुख्य गतिविधि वर्ग फ़ाइल में घोषित किया गया है। मैं इस संदर्भ के लिए एक रास्ता नहीं ढूँढ सकता। कोई संकेत?
setDisplayOptions()विधि ToolbarWidgetWrapperआइकन को फिर से नहीं बनाएगी। बस जब दूसरों को इस समस्या के रूप में अच्छी तरह से ठोकर खाने के लिए यहाँ छोड़ रहा है।