2011-03-15 41 views
107

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

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

@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); 
    } 

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

उत्तर

263

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

एपीआई स्तर 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); 
} 
+0

सावधान, यह केवल एपीआई लेवल 5 (एंड्रॉइड 2.0 और ऊपर) – Blundell

+0

के लिए है या मैं एपीआई लेवल 5 (एंड्रॉइड 2.1) – Shekhar

+4

का उपयोग कर रहा हूं टुकड़ों में क्या है? – crushman

8

एक सरल approac

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

एंड्रॉयड 2.0 शुरू की एक नई onBackPressed विधि, और these recommendations कैसे वापस जाएं बटन को संभालने के लिए पर

+0

पर संसाधित करना नहीं है, यह काम नहीं कर रहा है ... – Shekhar

8

आप का उपयोग करना चाहिए: ज वापस बटन प्रेस पर कब्जा और moveTaskToBack (सही) कॉल करने के लिए इस प्रकार है

@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 से जब उपयोगकर्ता depresses को सक्रिय कर देगा

13

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

onKeyUp(): 

की सिफारिश प्रोग्राम के बोलते हुएkeydown (उदाहरण के लिए एक निजी पूर्णांक नामित ECLAIR जोड़ सकते हैं) शुरुआत में एक कुंजी लेकिन यह दोहराएगा जबकि उपयोगकर्ता कुंजी को उदास रखता है। *

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

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

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); 
} 
0

यह मैं मदद की ..

@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(); 

} 

के लिए इसका उपयोग कर सकते मुझे आशा है कि यह आप में मदद मिलेगी ..:)

8

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

@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(); 

} 

चीयर्स!

+0

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

+1

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

+0

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

संबंधित मुद्दे