टुकड़ों का उपयोग करते समय Android नेविगेशन दराज छवि और अप कैरट के बीच स्विच करना


177

नेविगेशन ड्रॉअर का उपयोग करते समय एंड्रॉइड देवता अनुशंसा कर रहे हैं कि एक्शनबेर में "केवल उन स्क्रीन जिन्हें नेविगेशन ड्रॉअर में दर्शाया गया है, वास्तव में नेविगेशन ड्रॉअर छवि होनी चाहिए" और "सभी अन्य स्क्रीन में पारंपरिक अप कैरेट है।"

विवरण के लिए यहां देखें: 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;
         
    }

2
इसके अलावा अपने onBackPressed () मेथड में आप check कर सकते हैं कि getFragmentManager ()। GetBackStackEntryCount () मेथड के साथ कितनी एंट्रीज हैं और ड्रॉअर इंडिकेटर को इनेबल करें तभी रिजल्ट 0. है। इसमें प्रत्येक लोअरवेलिफग्रैगमेंट्स में homeAsUpIndicator इनेबल करना अनावश्यक है।
pvshnik

2
यह बहुत उपयोगी है! आपको अपनी पोस्ट के "समाधान" भाग को स्थानांतरित करना चाहिए और इसे वास्तविक "उत्तर" बनाना चाहिए। आप upvotes के लिए अधिक अंक मिल जाएगा और यह है सब के बाद एक जवाब
ओलेक्सी

तुम क्यों टुकड़ा यहाँ प्रतिस्थापित करती हैं: .replace(R.id.frag_layout। यदि यह एक और अधिक पदानुक्रम स्तर है, तो मुझे उम्मीद है कि आप .addइसे बैकस्टैक करेंगे।
JJD

5
भाई, तुम theDrawerToggle.setDrawerIndicatorEnabled(false);खंड के अंदर का संदर्भ कैसे लेते हो ? मुझे लगता है कि यह मुख्य गतिविधि वर्ग फ़ाइल में घोषित किया गया है। मैं इस संदर्भ के लिए एक रास्ता नहीं ढूँढ सकता। कोई संकेत?
स्काइनेट

1
टूलबार का उपयोग करते समय मुझे इस बीच घर का उपयोग न करने के लिए प्रदर्शन विकल्पों को स्विच करना पड़ा। अन्यथा दूसरी बार में एक ही टुकड़े को दर्ज करते समय (आंतरिक android.support.v7.internal.widget पैकेज की) setDisplayOptions()विधि ToolbarWidgetWrapperआइकन को फिर से नहीं बनाएगी। बस जब दूसरों को इस समस्या के रूप में अच्छी तरह से ठोकर खाने के लिए यहाँ छोड़ रहा है।
वुल्फराम रिट्मेयर 20

जवाबों:


29

आपने लिखा है कि निचले स्तर के टुकड़ों को लागू करने के लिए, आप मौजूदा टुकड़े को बदल रहे हैं, क्योंकि एक नई गतिविधि में निचले स्तर के टुकड़े को लागू करने का विरोध किया गया है।

मुझे लगता है कि तब आपको मैन्युअल रूप से बैक कार्यक्षमता को लागू करना होगा: जब उपयोगकर्ता ने वापस दबाया तो आपके पास कोड है जो स्टैक को पॉप करता है (जैसे Activity::onBackPressedओवरराइड में)। इसलिए, जब भी आप ऐसा करते हैं, आप उल्टा कर सकते हैं setDrawerIndicatorEnabled


धन्यवाद टॉम, कि काम किया! मैंने उपयोग किए गए समाधान के साथ मूल पोस्ट को अपडेट किया है।
इविलअश

6
निचले स्तर के टुकड़े में TheDrawerToggle को कैसे देखें? यह मुख्य गतिविधि में परिभाषित किया गया है, इस के आसपास मेरा सिर नहीं मिल सकता है!
स्काईनेट

1
आप गतिविधि को खंड से प्राप्त कर सकते हैं। तो ड्रॉअर टॉगल तक पहुंचने के लिए बस अपनी मुख्य गतिविधि में एक गेटर जोड़ें।
राफेल रॉयर-रिवार्ड

83

यह 1-2-3 के रूप में आसान है।

यदि आप प्राप्त करना चाहते हैं:

1) दराज संकेतक - जब कोई टुकड़े बैक स्टैक में नहीं होते हैं या दराज खोला जाता है

2) तीर - जब कुछ फ्रैगमेंट बैक स्टैक में होते हैं

private FragmentManager.OnBackStackChangedListener
        mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
        syncActionBarArrowState();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    mDrawerToggle = new ActionBarDrawerToggle(
            this,             
            mDrawerLayout,  
            R.drawable.ic_navigation_drawer, 
            0, 
            0  
    ) {

        public void onDrawerClosed(View view) {
            syncActionBarArrowState();
        }

        public void onDrawerOpened(View drawerView) {
            mDrawerToggle.setDrawerIndicatorEnabled(true);
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
    getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}

@Override
protected void onDestroy() {
    getSupportFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);
    super.onDestroy();
}

private void syncActionBarArrowState() {
    int backStackEntryCount = 
        getSupportFragmentManager().getBackStackEntryCount();
    mDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

3) दोनों संकेतक अपने आकार के अनुसार कार्य करते हैं

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.isDrawerIndicatorEnabled() && 
        mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else if (item.getItemId() == android.R.id.home && 
               getSupportFragmentManager().popBackStackImmediate()) {
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }
}

पीएस 3-लाइन संकेतक व्यवहार के बारे में अन्य सुझावों पर एंड्रॉइड डेवलपर्स पर एक नेविगेशन ड्रॉअर बनाना देखें ।


3
मैं तुम्हारे समान कुछ पर समाप्त हुआ। मुझे लगता है कि इस समाधान (बैकस्टैकचेंगलिस्टनर का उपयोग करके जो दिखाया गया है उसके बीच फ्लिप करने के लिए) सबसे सुरुचिपूर्ण है। हालाँकि, मेरे पास दो बदलाव हैं: 1) मैं onDrawer में ड्रॉअर इंडिकेटर को कॉल / चेंज नहीं करता / बंद करता हूँ / onDrawerOpened कॉल्स - इसकी ज़रूरत नहीं है, और 2) मैं फ़्रैगमेंट्स को खुद ही एब्सट्रैफ़िशन प्रदान करके हैंडल करता हूँ जो वे इनहेरिट करते हैं। औजार onOptionsItemSelected (..) और जो हमेशा setHasOptionsMenu (सच) कहता है;
एस्पेन रिस्केडल

2
Yout को तीर मोड में नेविगेशन दराज के लिए स्वाइप जेस्चर को भी लॉक करना चाहिए: mDrawerLayout.setDrawerLockMode (DrawerLayout.LOCK_MODE_LOCKED_CLOSED); और इसे फिर से ड्रॉअर इंडीकेटर मोड में सक्षम करें
आर्टकोएनिग

5
मैंने अपने नेवीगेशन वॉर में यह सब करना समाप्त कर दिया। एक आकर्षण btw की तरह काम करता है, धन्यवाद।
frostymarvelous

1
setActionBarArrowDependingOnFragmentsBackStack()... क्या एक लंबे नाम: पी
S.Thiongane

2
यह मेरे लिए तब अप बटन नहीं दिखाता है जब मैं खंड A से B में जाता हूं और A को बैकस्ट में जोड़ता हूं। :(
आनंदी

14

मैंने अगली चीज़ का उपयोग किया है:

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                if(getSupportFragmentManager().getBackStackEntryCount() > 0){
                    mDrawerToggle.setDrawerIndicatorEnabled(false);
                    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                }
                else {
                    getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                    mDrawerToggle.setDrawerIndicatorEnabled(true);
                }
            }
        });

1
इस तरह से आप वास्तव में काम किया है कि यह एक ही है। एक बार जब मैं इसे जोड़ देता हूं, drawerToggle.setToolbarNavigationClickListener(तो तीर क्लिक करते समय यह श्रोता कहलाता है
एपिकपांडाफर्स

धन्यवाद @Yuriy, इससे मुझे अपने मुद्दे को सुलझाने में मदद मिली
मुहम्मद शोएब मुर्तज़ा

12

यदि आपका अप एक्शन बार बटन काम नहीं करता है, तो श्रोता जोड़ना न भूलें:

// Navigation back icon listener
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
});

मुझे एक होम बटन के साथ दराज के नेविगेशन को लागू करने में कुछ परेशानी हुई है, कार्रवाई ब्यूटेन को छोड़कर सब कुछ काम किया।


10

मुख्य आइटम में होम आइटम चयन को संभालने की कोशिश करें जो कि ड्राट्रॉगल की स्थिति पर निर्भर करता है। इस तरह आपको हर टुकड़े में समान कोड नहीं जोड़ना है।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Only handle with DrawerToggle if the drawer indicator is enabled.
    if (mDrawerToggle.isDrawerIndicatorEnabled() &&
            mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action buttons
    switch (item.getItemId()) {
        // Handle home button in non-drawer mode
        case android.R.id.home:
            onBackPressed();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

+1 साफ समाधान। आपके जवाब पूरी तरह से प्रयोग करने योग्य होने के लिए आपको बैकस्ट पर एक चेक जोड़ना चाहिए। जब यह खाली होता है तो स्वचालित रूप से ड्रॉअर इंडिकेटर को सही पर सेट करें।
HpTerm

@HpTerm मैं बैकस्टैक को संभालता हूं onBackPressed()क्योंकि मैं दोनों के लिए समान व्यवहार चाहता था।
dzeikei

6

जाँच करना

@ डेज़ाइकी द्वारा दिया गया समाधान साफ-सुथरा है, लेकिन इसे तब बढ़ाया जा सकता है, जब टुकड़ों का उपयोग करके, बैकस्टैक खाली होने पर ड्रॉअर संकेतक को स्वचालित रूप से सेट करने के लिए स्वचालित रूप से हैंडल किया जा सके।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Only handle with DrawerToggle if the drawer indicator is enabled.
    if (mDrawerToggle.isDrawerIndicatorEnabled() &&
            mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action buttons
    switch (item.getItemId()) {
        // Handle home button in non-drawer mode
        case android.R.id.home:
            // Use getSupportFragmentManager() to support older devices
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.popBackStack();
            // Make sure transactions are finished before reading backstack count
            fragmentManager.executePendingTransactions();
            if (fragmentManager.getBackStackEntryCount() < 1){
                mDrawerToggle.setDrawerIndicatorEnabled(true);  
            }
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

संपादित करें

@JJD के सवाल के लिए।

टुकड़े एक गतिविधि में आयोजित / प्रबंधित किए जाते हैं। उपरोक्त कोड उस गतिविधि में एक बार लिखा गया है, लेकिन केवल देखभाल के लिए देखभाल करें onOptionsItemSelected

अपने एक ऐप में मुझे बैक बटन दबाए जाने पर अप कैरट के व्यवहार को संभालने की भी आवश्यकता थी। इसे ओवरराइड करके हैंडल किया जा सकता है onBackPressed

@Override
public void onBackPressed() {
    // Use getSupportFragmentManager() to support older devices
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.executePendingTransactions();
    if (fragmentManager.getBackStackEntryCount() < 1){
        super.onBackPressed();
    } else {
        fragmentManager.executePendingTransactions();
        fragmentManager.popBackStack();
        fragmentManager.executePendingTransactions();
        if (fragmentManager.getBackStackEntryCount() < 1){
            mDrawerToggle.setDrawerIndicatorEnabled(true);
        }
    }
};

के बीच कोड दोहराव पर ध्यान दें onOptionsItemSelectedऔर onBackPressedजो एक विधि बनाने और दोनों स्थानों में उस पद्धति को कॉल करने से बचा जा सकता है।

यह भी ध्यान दें कि मैं दो और बार जोड़ता हूं executePendingTransactionsजो मेरे मामले में आवश्यक था या फिर मुझे कभी-कभी अप कैरट के अजीब व्यवहार थे।


क्या यह पूरा कोड है जिसे मुझे अप कैरट व्यवहार को लागू करने के लिए जोड़ना होगा या आप अन्य पदों में से एक का उल्लेख कर रहे हैं? कृपया इसे स्पष्ट करें।
JJD

संपादन के लिए धन्यवाद। वास्तव में मैं mDrawerToggleएक NavigationDrawerFragmentवर्ग के भीतर बना रहता हूं । इसे काम करने के लिए मुझे होम बटन / संकेतक की स्थिति को भी टॉगल करना होगा - देखें NavigationDrawerFragment#toggleDrawerIndicator:। इसके अलावा, मुझे यकीन नहीं है कि आपको प्रारंभिक जांच की आवश्यकता है onOptionsItemSelected: मैंने इसे अनसुना कर दिया। - सरलीकृत उदाहरण
JJD

संशोधित कार्यान्वयन : आप प्रारंभिक चेक इन के बारे में सही हैं onOptionsItemSelected। यह सुनिश्चित करता है कि नेविगेशन ड्रावर अभी भी शीर्ष-स्तरीय पदानुक्रम में खुलता है। हालाँकि, मैंने कोड को कोड में स्थानांतरित कर दिया NavigationDrawerFragment#onOptionsItemSelected। यह मुझे उजागर mDrawerToggleकरने में मदद नहीं करता है MainActivity
JJD

@JJD मुझे याद है कि पदानुक्रम के प्रत्येक स्तर के लिए अप कैरट के लिए काम करने में सब कुछ थोड़ा संघर्ष कर रहा था। जब तक यह आपके लिए काम करता है वह भी ठीक है। बेशक, जैसा कि आप कहते हैं, आप इसे उजागर नहीं करने के लिए कोड को कहीं और स्थानांतरित कर सकते हैं।
HpTerm

2

मैंने हैमबर्गर मेनू की दृश्य स्थिति को अपडेट करने के लिए होस्टिंग गतिविधि के लिए एक इंटरफ़ेस बनाया। शीर्ष स्तर के टुकड़े के लिए मैंने टॉगल को सेट किया है trueऔर उन टुकड़ों के लिए जिनके लिए मैं प्रदर्शित करना चाहता हूं <तीर मैं जिस पर सेट करता हूं false

public class SomeFragment extends Fragment {

    public interface OnFragmentInteractionListener {
        public void showDrawerToggle(boolean showDrawerToggle);
    }

    private OnFragmentInteractionListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            this.mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        mListener.showDrawerToggle(false);
    }
}

फिर मेरी गतिविधि में ...

public class MainActivity extends Activity implements SomeFragment.OnFragmentInteractionListener {

    private ActionBarDrawerToggle mDrawerToggle;

    public void showDrawerToggle(boolean showDrawerIndicator) {
        mDrawerToggle.setDrawerIndicatorEnabled(showDrawerIndicator);
    }

}

2

यह उत्तर काम कर रहा था लेकिन इसके साथ थोड़ी समस्या थी। getSupportActionBar().setDisplayHomeAsUpEnabled(false)स्पष्ट रूप से नहीं कहा था और यह पैदा कर रहा था ड्रॉवर छिपाना चाहता है जब भी वहाँ बदलते तो backstack में कोई आइटम नहीं थे setActionBarArrowDependingOnFragmentsBackStack()विधि मेरे लिए काम किया।

private void setActionBarArrowDependingOnFragmentsBackStack() {
        int backStackEntryCount = getSupportFragmentManager()
                .getBackStackEntryCount();
        // If there are no items in the back stack
        if (backStackEntryCount == 0) {
            // Please make sure that UP CARAT is Hidden otherwise Drawer icon
            // wont display
            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
            // Display the Drawer Icon
            mDrawerToggle.setDrawerIndicatorEnabled(true);
        } else {
            // Show the Up carat
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            // Hide the Drawer Icon
            mDrawerToggle.setDrawerIndicatorEnabled(false);
        }

    }

मेरे मामले में धांधली समाधान केवल एक्शन का उपयोग कर रहा था।
गोरों का

1

तर्क स्पष्ट है। बैक बटन दिखाएँ अगर टुकड़ा वापस ढेर स्पष्ट है। सामग्री हैमबर्गर-बैक एनीमेशन दिखाएं यदि टुकड़ा स्टैक स्पष्ट नहीं है।

getSupportFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            syncActionBarArrowState();
        }
    }
);


private void syncActionBarArrowState() {
    int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
    mNavigationDrawerFragment.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

//add these in Your NavigationDrawer fragment class

public void setDrawerIndicatorEnabled(boolean flag){
    ActionBar actionBar = getActionBar();
    if (!flag) {
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.setHomeAsUpIndicator(getColoredArrow());
    } else {
        mDrawerToggle.setDrawerIndicatorEnabled(true);
    }
    mDrawerToggle.syncState();
    getActivity().supportInvalidateOptionsMenu();
}

//download back button from this(https://www.google.com/design/icons/) website and add to your project

private Drawable getColoredArrow() {
    Drawable arrowDrawable = ContextCompat.getDrawable(getActivity(), R.drawable.ic_arrow_back_black_24dp);
    Drawable wrapped = DrawableCompat.wrap(arrowDrawable);

    if (arrowDrawable != null && wrapped != null) {
        // This should avoid tinting all the arrows
        arrowDrawable.mutate();
        DrawableCompat.setTint(wrapped, Color.GRAY);
    }
    return wrapped;
}

1

यदि आप GMAIL ऐप पर एक नज़र डालते हैं और यहाँ पर कैरेट / कॉन्टेंस आइकॉन की खोज करने के लिए आते हैं।

मैं आपको ऐसा करने के लिए कहूंगा, उपरोक्त उत्तर में से कोई भी स्पष्ट नहीं था। मैं स्वीकृत उत्तर को संशोधित करने में सक्षम था।

  • नेवीगेशनड्राइवर -> सूची में सबफ्रैगमेंट होते हैं।


  • सबफ्रैगमेंट्स को इस तरह सूचीबद्ध किया जाएगा

  • FirstFragment == स्थिति 0 ---> इसमें सबफ़्रैगमेंट होंगे -> टुकड़ा

  • secondFragment
  • thirdFragment और बहुत आगे ...।

FirstFragment में आपके पास अन्य टुकड़ा है।

इसको DrawerActivity पर कॉल करें

getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            if (getFragmentManager().getBackStackEntryCount() > 0) {
                mDrawerToggle.setDrawerIndicatorEnabled(false);
            } else {
                mDrawerToggle.setDrawerIndicatorEnabled(true);
            }
        }
    });

और टुकड़े में

    setHasOptionsMenu(true);    

@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
            activity.onBackPressed();
            return true;
    }
    return false;
}

OnBackPressed दराज गतिविधि पद्धति पर फिर से नेविगेशन सूची आइकन को सक्षम करने के लिए दराज को टॉगल करने के लिए सही सेट करें।

धन्यवाद, पुस्प



0

IMO, rNnodennyk या टॉम के समाधान में onNavigateUp () (जैसा कि यहां दिखाया गया है ) का उपयोग करके क्लीनर है और बेहतर काम करने लगता है। बस इसके साथ onOptionsItemSelected कोड बदलें:

@Override
public boolean onSupportNavigateUp() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        // handle up navigation
        return true;
    } else {
        return super.onSupportNavigateUp();
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.