होम बटन के लिए एक्शन बार का ऑनकिक श्रोता


84

मैं onClickListenerएक्शन बार के होम बटन के लिए एक कस्टम कैसे लागू कर सकता हूं ?

मैंने पहले ही एक कर दिया था getSupportActionBar().setDisplayHomeAsUpEnabled(true);और अब मैं होम बटन पर क्लिक करने की स्थिति में उपयोगकर्ता को एक निश्चित गतिविधि पर पुनर्निर्देशित करना चाहता हूं।

मैंने कोशिश की:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            item.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                public boolean onMenuItemClick(MenuItem item) {
                    Intent i = new Intent();
                    i.setClass(BestemmingActivity.this, StartActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                    return true;
                }
            });
        default:
            return super.onOptionsItemSelected(item);
        }
    }

लेकिन इसमें कभी प्रवेश नहीं होता onMenuItemClick

असल में, यह इस लिंक की तरह ही किया जाता है, लेकिन फिर भी यह श्रोता में प्रवेश नहीं करता है।

जवाबों:


112

अगर किसी और को समाधान की जरूरत है

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();  return true;
    }

    return super.onOptionsItemSelected(item);
}

यह एक विनम्रता होनी चाहिए। महान जवाब
jemsnaban

3
मेरे साथ काम कियाreturn true;
रिक

1
ब्लॉक return true;के अंत में रखें if, फिर यह सही है
एंड्रॉइडगूई

2
यह दृष्टिकोण एरो आइकन के साथ होम / बैक बटन के लिए काम नहीं कर रहा है।
ट्रैंसर

111

मैं एक्शनबेरलॉक का उपयोग करता हूं , हम सेट करने के बाद हम supportActionBar.setHomeButtonEnabled(true);
ऑनमेन्यूएट को हटा सकते हैं। विधि:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
        toggle();

        // Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
        break;

    }

    return true;
}

मुझे आशा है कि यह काम आपके लिए ~~~ सौभाग्य


4
मुझे काम नहीं करता है इसके अंतिम के रूप में onMenuItemSelected ओवरराइड नहीं कर सकता।
अरित्रा रॉय

Android एनोटेशन के साथ बस @OptionsItem (android.R.id.home) सार्वजनिक शून्य yourMethod का उपयोग करें () {}
इटालो बोर्स्सैटो

23

अगर हम कोड के ठीक बाद दिए गए एक्शन बार को दिए गए सिस्टम का उपयोग करते हैं तो ठीक है

getActionBar().setHomeButtonEnabled(true);

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {

    int itemId = item.getItemId();
    switch (itemId) {
    case android.R.id.home:
      //do your action here.
        break;

    }

    return true;
}

7

फिक्स्ड: कोई उपयोग करने की जरूरत है setOnMenuItemClickListener। बस बटन को दबाते हुए, यह इरादे के माध्यम से गतिविधि बनाता है और लॉन्च करता है।

आपकी मदद के लिए हर कोई बहुत बहुत धन्यवाद!


सही, एक्शन बार मेनू श्रोताओं का ध्यान रखता है और onOptionsItemSelected()स्वचालित रूप से कॉल करता है । मैन्युअल रूप से स्थापित करने की आवश्यकता नहीं है (जो वास्तव में चीजों को तोड़ सकता है)।
निकोले एलेनकोव

5

क्या हो रहा है के आधे हिस्से में उत्तर। अगर माता-पिता गतिविधि मेनिफ़ेस्ट में सेट onOptionsItemSelectedनहीं करते हैं तो नियंत्रण homeAsUpबटन नहीं । xml सिस्टम पैरेंट गतिविधि में जाता है। गतिविधि टैग में इस तरह का उपयोग करें:

<activity ... >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.activities.MainActivity" /> 
</activity>

3

यदि आप ICS पर चल रहे हैं, तो आपको होम एक्शन स्पष्ट रूप से सक्षम करने की आवश्यकता है। से डॉक्स :

नोट: यदि आप आइकन का उपयोग होम गतिविधि पर जाने के लिए कर रहे हैं, तो एंड्रॉइड 4.0 (एपीआई स्तर 14) के साथ शुरुआत करने वाले से सावधान रहें, आपको स्पष्ट रूप से आइकन को एक्शन आइटम के रूप में सेटहोमबटनइन्हेंबिल्ड (सत्य) (पिछले संस्करणों में) कॉल करके सक्षम करना होगा आइकन को डिफ़ॉल्ट रूप से एक्शन आइटम के रूप में सक्षम किया गया था)।


3
मैं पहले से ही एक किया था getSupportActionBar().setDisplayHomeAsUpEnabled(true);और एकgetSupportActionBar().setHomeButtonEnabled(true);
noloman


-4

आपको अपने ओवरराइड को हटाना चाहिए। इसे हटा दिया गया है और इस कोड के साथ अपने ऑनक्रिएट को हटा दें।

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_action_bar_finish_order_stop, menu);
        menu.getItem(0).setOnMenuItemClickListener(new FinishOrderStopListener(this, getApplication(), selectedChild));
        return true;

    }

1
कृपया केवल कोड के साथ उत्तर के बारे में स्टैकओवरफ़्लो की नीतियों को पढ़ने और वापस (?) लोगों को समझने में मदद करने के लिए कुछ स्पष्टीकरण जोड़ें।
नौ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.