Android में वापस बटन अक्षम करें


334

एप्लिकेशन लॉग आउट करते समय एंड्रॉइड में बैक बटन को कैसे अक्षम करें?


1
क्या आप सवाल पर थोड़ा और स्पष्ट हो सकते हैं? यदि आप बैक बटन डिफ़ॉल्ट व्यवहार को अधिलेखित करने की तलाश कर रहे हैं तो इस प्रश्न को यहां देखें। stackoverflow.com/questions/2000102/…
गोपीनाथ

26
कृपया इसे तब तक न करें जब तक आपके पास एक अच्छा कारण न हो, क्योंकि ऑपरेशन के अपेक्षित मॉडल को तोड़ने से पूरे मंच को बहुत नुकसान
पहुंचता है

14
यदि आप एक बेवकूफ सैमसंग एस 4 से निपटना चाहते हैं, तो आप ऐसा करना चाहते हैं, जहां बैक बटन संवेदनशील नहीं है (भौतिक नहीं), फोन के किनारे पर, जो कि पहले से ही इतना संवेदनशील है कि एक हथेली पक्ष के खिलाफ आराम कर रही है वापस जाओ।
लहसुन

1
यह Android गुणवत्ता और डिजाइन गाइड , UX-N1 की भूमिका के खिलाफ है
मिगुएलस्लैव

जवाबों:


651

OnBackPressed विधि को ओवरराइड करें और डिवाइस पर बैक बटन को संभालने के लिए कुछ भी न करें।

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
यह कुंजी हैंडलिंग विधियों को ओवरराइड करने की तुलना में बहुत बेहतर और क्लीनर है, और इसका प्रभाव समान है। बहुत बढ़िया जवाब!
निक रीमन

2
महान समाधान दोस्त। क्या होम बटन के साथ ऐसा करने का कोई तरीका है?
दत्ता कुंडे

1
यह भी खूब रही! मैं वास्तव में किसी भी अन्य गतिविधि से वापस दबाने पर हमेशा अपनी मुख्य गतिविधि पर वापस जाना चाहता था, और इस पद्धति को ओवरराइड करने से मुझे बहुत आसानी से ऐसा करने की अनुमति मिलती है।
जिम

उफ़ मैं सुपर.ऑनबैकपाइड () हटाना भूल गया।
अरस्तू माइकल

173

यदि उच्चतर स्तर 2.0 और इसके बाद के संस्करण की तलाश में यह बहुत अच्छा होगा

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

अगर 1.6 के स्तर तक Android एपीआई स्तर की तलाश है।

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

बैक बटन दबाए जाने को रोकने के लिए अपनी गतिविधि में उपरोक्त कोड लिखें


5
Onbackpressed की एपीआई स्तर की आवश्यकता के कारण onbackpressed का उपयोग करने की तुलना में यह विधि अधिक पीछे संगत है
एंड्रयूपेक

5
बहुत बढ़िया जवाब। हालाँकि मुझे अपने प्रोजेक्ट के लिए इसकी आवश्यकता नहीं है, फिर भी मैं सराहना करता हूं कि आपने पुराने और नए दोनों तरीके प्रदान किए हैं। इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। +1
जिम

1
@Javanator दूसरा मेरे लिए काम नहीं करेगा (उदाहरण के लिए एपीआई स्तर 16 के लिए), लेकिन पहला एक आकर्षण की तरह काम करता है
noloman

38

आप इसे सरल तरीके से कर सकते हैं Super.onBackPressed () कॉल न करें

नोट: - इसे तब तक न करें जब तक कि आपके पास इसे करने का मजबूत कारण न हो।

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}

6
"क्यों नहीं" के रूप में एक व्याख्या महान होगी। धन्यवाद।
लगभग एक शुरुआती

कॉलिंग नहीं .super महत्वपूर्ण है!
रण

3
@almostabeginner क्योंकि सुपर न बुलाना बैक बटन के सामान्य उपयोग को अमान्य कर देगा। जब एक सामान्य रूप से काम करने वाला बटन काम करना बंद कर देगा तो उपयोगकर्ता फ्रीक कर देंगे। वे सोच सकते हैं कि ऐप छोटी गाड़ी है या फोन ख़राब है आदि, आपका ऐप अंत में अपराधी होगा।
बेंगोंगोन97


13

मैं इसका उपयोग कर रहा हूँ …………।

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}

9

यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी गतिविधि समाप्त होने से पहले आपका एंड्रॉइड क्लाइंट एप्लिकेशन कुछ सर्वर से लॉग आउट हो जाए -> अपने स्वयं के थ्रेड पर एक सेवा के साथ लॉग आउट करें (वैसे भी आप ऐसा करने वाले हैं)।

बैक बटन को अक्षम करने से आपके लिए कुछ भी हल नहीं होगा। उदाहरण के लिए उपयोगकर्ता द्वारा फ़ोन कॉल प्राप्त करने पर आपको अभी भी वही समस्या होगी। जब एक फोन कॉल प्राप्त होता है, तो आपकी गतिविधि को नेटवर्क से विश्वसनीय उत्तर प्राप्त करने से पहले मारे जाने की अधिक संभावना होती है।

इसलिए आपको नेटवर्क से जवाब के लिए किसी सेवा को अपने स्वयं के थ्रेड पर प्रतीक्षा करने देना चाहिए, और यदि यह सफल नहीं होता है तो इसे फिर से प्रयास करें। एंड्रॉइड सर्विस न केवल एक जवाब वापस पाने से पहले मारे जाने की बहुत कम संभावना है, बल्कि नौकरी खत्म करने से पहले इसे वास्तव में मार दिया जाना चाहिए, इसे फिर से प्रयास करने के लिए अलार्ममैन द्वारा पुनर्जीवित किया जा सकता है।


8

बस onBackPressed () विधि को ओवरराइड करें और onBackPressed method या अन्य के सुपर क्लास को कॉल करने की आवश्यकता नहीं है।

@Override
public void onBackPressed()
{

}

या onBackPressed () पद्धति में अपनी वर्तमान गतिविधि पास करें।

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

अपनी आवश्यकता गतिविधि का नाम myActivity में बदलें।

यदि आप विखंडन का उपयोग कर रहे हैं तो सबसे पहले callParentMethod () विधि को कॉल करें

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

तो खाली विधि को बुलाओ

@Override
public void onBackPressed()
{

}

6

यदि आप उपयोग कर रहे हैं FragmentActivity। फिर ऐसे करें

पहले इसे अपने अंदर बुलाओ Fragment

public void callParentMethod(){
    getActivity().onBackPressed();
}

और फिर onBackPressedअपने पैरेंट FragmentActivityक्लास के पक्ष में कॉल विधि ।

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}

5

बस इस कोड का उपयोग करते हुए: यदि आप बैकप्रेस्ड डिसेबल चाहते हैं, तो आप सुपर का उपयोग न करें। BackPressed ();

@Override
public void onBackPressed() {

}

4

यदि आप लॉग आउट करते समय अपने ऐप को अक्षम करना चाहते हैं, तो आप गैर-रद्द करने योग्य संवाद को पॉप अप कर सकते हैं।


4

आप onBackPressed()अपनी गतिविधि में विधि को ओवरराइड कर सकते हैं और कॉल को सुपर क्लास में निकाल सकते हैं ।

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}

3

आपको बस बैक बटन के लिए विधि को ओवरराइड करना होगा। आप चाहें तो विधि को खाली छोड़ सकते हैं ताकि जब आप बैक बटन दबाएंगे तो कुछ नहीं होगा। कृपया नीचे दिए गए कोड को देखें:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}

3

उपरोक्त उत्तर से इन दो विधियों के अलावा।

onBackPressed () (API स्तर 5, Android 2.0)

onKeyDown () (API स्तर 1, Android 1.0)

आप इस तरह dispatchKeyEvent()(API Level 1, Android 1.0) को भी ओवरराइड कर सकते हैं ,

dispatchKeyEvent() (एपीआई स्तर 1, Android 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}


2

मेरे लिए बस ओवरराइडिंग onBackPressed()काम नहीं करती थी लेकिन स्पष्ट रूप से इंगित करती थी कि इसे किस गतिविधि से शुरू करना चाहिए:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}

1

इसे इस्तेमाल करे:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 if (keyCode == KeyEvent.KEYCODE_BACK) {

   return true;
 }
   return super.onKeyDown(keyCode, event);    
}

1

महान काम super.onBackPressed()से हटा दें public void onBackPressed()। एंड्रॉयड 9 में इसका परीक्षण किया गया

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