एंड्रॉइड में एक्शन बार बैक बटन को ओवरराइड कैसे करें?


95

मैं एक्शन बार में एक्टिविटी बैक बटन को कस्टमाइज करना चाहता हूं, हार्ड की बैक बटन में नहीं। मैं इस onBackPressed()विधि से आगे निकल गया हूं । यह मेरे एमुलेटर बैक बटन के साथ काम करता है, लेकिन एक्शन बार बैक बटन के साथ नहीं।

मैं चाहता हूं कि यह एक्शन बार के साथ हो। मैं यह कैसे कर सकता हूँ?

यहाँ मेरा कोड है:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

मैंने इस टोस्ट का उपयोग किया है या नहीं, वापस काम कर रहा है या नहीं, लेकिन वास्तविक कार्यान्वयन बदल जाता है जैसे पिछली गतिविधि में वापस जाना। लेकिन यह एक्शन बार के शीर्ष पर मौजूद बटन (गतिविधि के शीर्षक के अलावा) के साथ काम नहीं कर रहा है।

कृपया कोई भी मुझे समस्या बता सकता है।

जवाबों:


210

मुझे लगता है कि आप होम बटन के क्लिक ऑपरेशन को ओवरराइड करना चाहते हैं। आप अपनी गतिविधि में इस तरह की कार्यक्षमता को ओवरराइड कर सकते हैं।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}

1
नूह इब्राहिम, दरअसल ब्राउज़र में बैक बटन की तरह टॉप लेफ्ट कॉर्नर पर बैक बटन है। जब मैं उस बटन पर क्लिक करता हूं, तो मैं पिछली गतिविधि पर वापस जाना चाहता हूं। ऊपर दिए गए कोड यू की तरह नहीं।
GK

4
super.onBackPressed () जोड़ें; इसे करने के लिए
redestructa

2
यह मेरे लिए काम किया के बाद मैं बदल return true;करने के लिए return super.onOptionsItemSelected(item)। तब आप तब कुछ कर सकते हैं जब उपयोगकर्ता एक्शनबार बटन पर क्लिक करता है, लेकिन फिर भी बटन की समान कार्यक्षमता को बनाए रखता है।
कुम्हियामा

इस तकनीक द्वारा बैक एरो बटन देर से प्रतिक्रिया दे रहा है। मेरा मतलब है कि मुझे घटना के लिए दूसरी बार इंतजार करना होगा। इसे दबाते समय इस बटन पर चयनकर्ता दिखाई नहीं दे रहा है
गोपाल सिंह सिरवी

मेरे लिए काम नहीं किया। जब मैंने डीबग किया, तो मुझे होम बटन की आईडी और बटन की आईडी अलग-अलग लगी।
वाइपर

45

यदि आप ActionBar बैक बटन हार्डवेयर बैक बटन के समान व्यवहार करते हैं:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

1
केस android.R.id.homeफायरिंग नहीं करता
Trancer

2
@ ट्रैन्सर अगर आप इसे फ्रैगमेंट में उपयोग करते हैं, तो आपको इसके अलावा setHasOptionsMenu(true)टुकड़े के
ऑनक्रिट

10

दो बातों का ध्यान रखें कि उपयोगकर्ता या तो बैक बटन दबा सकता है या एक्शनबार होम बटन दबा सकता है।
इसलिए, यदि आप उसे उसी गंतव्य पर पुनर्निर्देशित करना चाहते हैं तो आप ऐसा कर सकते हैं।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

यह उपयोगकर्ता को कुंजी या एक्शन बार बटन दबाने के इरादे से ले जाएगा।


मामला android.R.id.homeफायरिंग नहीं करता है
ट्रान्सर

@ ट्रैंसर, यह लगभग 1.5+ वर्ष का हो गया है। और मैं अब Android नहीं है। मैं अब आपकी मदद नहीं कर सकता। माफ़ करना।
ssi-aik

तो समाधान क्या है?
जीए 1

7
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }

2
आप इसे टिप्पणी के रूप में जोड़ सकते हैं। यह स्वीकृत उत्तर के समान ही है।
सूफियान

7

क्षमा करें, मेरा उत्तर देर से आया है, लेकिन इस प्रश्न के साथ इस पृष्ठ पर पहुंचने वाले किसी अन्य व्यक्ति के लिए, मैंने उपरोक्त कोशिश की थी:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

लेकिन यह "बैक" बटन प्रेस को पकड़ने में विफल रहा।

आखिरकार मुझे एक विधि मिली जिसने मेरे लिए https://stackoverflow.com/a/37185334/3697478 पर काम किया जो "onSupportNavigateUp ()" को ओवरराइड करने के लिए है क्योंकि मैं "AppCompatActivity" समर्थन लाइब्रेरी से एक्शनबार का उपयोग कर रहा हूं। (नए एक्शनबार / टूलबार लाइब्रेरी के लिए एक समतुल्य "onNavigateUp ()" है।)

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

और मैंने "Android: parentActivityName =" को हटा दिया। मैनिफ़ेस्टी "सेक्शन फ़ाइल को सेक्शन।


4

मैंने इसे प्राप्त किया है, बस दो चरणों का उपयोग करके,

चरण 1: AndroidManifest.xml पर जाएं और टैग में पैरामीटर जोड़ें - Android: parentActivity.ame = "। Home.HomeActivity"।

उदाहरण :

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

चरण 2: एक्टिविटीडेल में पिछले पृष्ठ / गतिविधि के लिए अपनी कार्रवाई जोड़ें

उदाहरण :

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }

2

यदि आप ActionBar होम बटन दबाकर किसी गतिविधि के पिछले उदाहरण पर लौटना चाहते हैं , तो इसे पुनः बनाए बिना , आप बैकपैक से एक का उपयोग करने के लिए getParentActivityIntent विधि को ओवरराइड कर सकते हैं:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

EDIT:
इसके अलावा आप सिंगलपॉप के लिए अपनी मूल गतिविधि के लॉन्चमोड को
सेट करके एक ही परिणाम प्राप्त कर सकते हैं इसलिए अपने प्रकटन में मूल गतिविधि पर सेट करें। या आप फ्लैग FLAG_ACTIVITY_CLEAR_TOP का उपयोग यूपी के इरादे से कर सकते हैं। संदर्भ: नेविगेशन प्रदान करना
android:launchMode="singleTop"


2

(1) अपने बच्चे की गतिविधि के लिए मूल गतिविधि जोड़ें (AndroidManifest.xml)

<activity
        android:name=".ParentActivity" />

(2) चाइल्ड एक्टिविटी के अंदर onSupportNavigateUp मेथड को ओवरराइड करें

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

0
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

0

बार में बैक बटन सेट करने के कई तरीके हैं:

1) विधि .setDisplayHomeAsUpEnabled(true);यह करेगी, और फिर आप बस ओवरराइड कर सकते हैंandroid.R.id.home

2) <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />एंड्रॉइड मैनिफेस्ट में जोड़ना , लेकिन इस मामले में आप ओन्यूएशन मेनुसेलेक्टेड में ओवरराइड नहीं कर सकतेandroid.R.id.home

.. उन लोगों के लिए जो आश्चर्य करते हैं कि यह उनके लिए काम क्यों नहीं करता है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.