गतिविधि में बैक बटन को कैसे संभालना है


136

किसी गतिविधि में बैक बटन कैसे संभालें? मेरे पास कुछ बटन हैं। यदि मैं बटन में से एक पर क्लिक करता हूं तो यह उन बटन पर पुनर्निर्देशित हो जाता है जिनकी मुझे आवश्यकता होती है। यह ठीक काम कर रहा है लेकिन जब मैं बैक बटन दबाता हूं तो यह समाप्त हो जाता है।

इस समस्या को हल कैसे करें। मेरे पास उन सभी बटनों के लिए केवल एक गतिविधि है। अग्रिम में धन्यवाद।

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

मैंने बैक बटन को संभालने के लिए उपरोक्त कोड का उपयोग किया है, लेकिन इसके काम नहीं कर रहा है। जब मैं वापस बटन दबाता हूँ तो उसका प्रहार होता है।

जवाबों:


326

आप इसे इस तरह से संभाल सकते हैं:

एपीआई स्तर 5 और अधिक के लिए

@Override
public void onBackPressed() {
    // your code.
}

एपीआई 5 से अधिक पुराना

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

6
टुकड़ों में क्या?
क्रशमैन

1
हां, क्या कोई जानता है कि इसे एक टुकड़े से कैसे किया जाता है
जेम्स विर्ज़बा

3
@ james-wierzba एक गतिविधि में संभाल और एक टुकड़ा करने के लिए प्रसंस्करण प्रतिनिधि
Grigorii Chudnov

19

उपरोक्त के अलावा मैं व्यक्तिगत रूप से सलाह देता हूं

onKeyUp():

जब उपयोगकर्ता शुरू में एक कुंजी को दबाता है, तो प्रोग्रामिकली कीडिंग में आग लग जाएगी, लेकिन जब उपयोगकर्ता कुंजी को दबाए रखेगा तो यह दोहराएगा। *

यह सभी विकास प्लेटफार्मों के लिए सही है।

Google विकास ने सुझाव दिया कि यदि आप एक दृश्य में BACK बटन को रोक रहे हैं, तो आपको KeyEvent को कीडाउन पर स्टार्टट्रैकिंग के साथ ट्रैक करना चाहिए और फिर Keyup के साथ आह्वान करना चाहिए।

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** Your Code ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

15

दोनों हार्डवेयर डिवाइस बैक बटन और सॉफ्ट होम (बैक) बटन जैसे "<-" यह मेरे लिए काम करता है। (* नोट मैं गतिविधि में एक ऐप बार / टूलबार है)

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



@Override
public void onBackPressed() {
   //Execute your code here
   finish();

}

चीयर्स!


मैंने फिनिश का उपयोग किया है और यह पिछली गतिविधि पर वापस नहीं जाती है।
Si8

2
"समाप्त ()" केवल आपकी वर्तमान गतिविधि को बंद करता है। आपको इरादे का उपयोग करके अपनी पिछली गतिविधि पर वापस जाने की आवश्यकता है। Btw, आपकी पिछली गतिविधि तब भी खुली होनी चाहिए जब आपने इसे पहले से नेविगेट करते समय "खत्म ()" नहीं किया था।
एस ब्रूस 11

मैं कुछ परीक्षण कर रहा हूं और आपको अपडेट करूंगा। जवाब देने के लिए धन्यवाद।
15

1
बस खत्म होने के बजाय super.onBackPressed () का उपयोग करें
b25n12

9

एक सरल तरीका है बैक बटन प्रेस पर कब्जा करना और मूव को दबानाTTTBBack (true) निम्नानुसार है:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

एंड्रॉइड 2.0 ने एक नया ऑन बैकप्रेड विधि पेश किया, और बैक बटन को कैसे संभालना है , इन सिफारिशों पर


9

आपको उपयोग करना चाहिए:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        // Take care of calling this method on earlier versions of
        // the platform where it doesn't exist.
        onBackPressed();
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    // This will be called either automatically for you on 2.0
    // or later, or by the code above on earlier versions of the
    // platform.
    return;
}

यहाँ पर परिभाषित किया गया है: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

यदि आप कोड को संकलित करने के लिए पुराने संस्करण का उपयोग कर रहे हैं, तो android.os.Build.VERSION_CODES.ECLAIR को 5 से बदलें (आप उदाहरण के लिए ECLAIR नामक एक निजी int जोड़ सकते हैं)


1

इससे मुझे मदद मिली ।।

@Override
public void onBackPressed() {
    startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();
}

या ????? यहां तक ​​कि आप इसका उपयोग दराज के टॉगल के लिए भी कर सकते हैं

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
        startActivity(new Intent(currentActivity.this, LastActivity.class));
    finish();

}

मुझे आशा है कि यह आपकी मदद करेगा .. :)


1

यह कुछ करने का एक सरल तरीका है।

    @Override
        public void onBackPressed() {
            // do what you want to do when the "back" button is pressed.
            startActivity(new Intent(Activity.this, MainActivity.class));
            finish();
        }

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

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