Android: पिछली गतिविधि पर वापस जाएं


524

मैं एंड्रॉइड ऐप पर कुछ सरल करना चाहता हूं। पिछली गतिविधि में वापस जाना कैसे संभव है।

मुझे पिछली गतिविधि पर वापस जाने के लिए किस कोड की आवश्यकता होगी


5
पिछले खुले activiy पर नज़र रखें
वुक

53
आप बस सरल कॉल खत्म (); चीयर्स
गुयेन मिन्ह

super.finish (); यदि आप इसे गतिविधि के अंदर से बुला रहे हैं!
हैप्पीहार्डिक

5
यहां एक प्रश्न: यदि एंड्रॉइड ने कम मेमोरी या अन्य मुद्दों के कारण पिछली गतिविधि को नष्ट कर दिया है, तो वह गतिविधि अब बैकस्टैक में नहीं होगी और फिर क्या होगा?
सनी

@ मुझे लगता है कि कचरा संग्रहकर्ता ढेर में सबसे अधिक गतिविधि के साथ शुरू होता है। इसलिए यदि कोई पिछली गतिविधि नहीं है, तो वर्तमान गतिविधि भी नहीं होगी। लेकिन मैं सिर्फ इसलिए मान लेता हूं क्योंकि वह व्यवहार किसी विशेष क्रम के बिना एक स्टैक में स्मृति को मुक्त करने से अधिक समझ में आता है। मेरी टिप्पणी सही है, अगर कोई इसे वास्तव में जानता है।
सेडाट किंसी

जवाबों:


486

एंड्रॉइड गतिविधियों को गतिविधि स्टैक में संग्रहीत किया जाता है। पिछली गतिविधि में वापस जाने का मतलब दो चीजें हो सकती हैं।

  1. आपने startActivityForResult के साथ एक और गतिविधि से नई गतिविधि खोली । उस स्थिति में आप अपने कोड से फिनिशएक्टिविटी () फ़ंक्शन को कॉल कर सकते हैं और यह आपको पिछली गतिविधि पर वापस ले जाएगा।

  2. गतिविधि स्टैक का ध्यान रखें। जब भी आप एक इरादे के साथ एक नई गतिविधि शुरू करते हैं तो आप एक इरादे के ध्वज को निर्दिष्ट कर सकते हैं जैसे FLAG_ACTIVITY_REORDER_TO_FRONTया FLAG_ACTIVITY_PREVIOUS_IS_TOP। आप अपने अनुप्रयोग में गतिविधियों के बीच फेरबदल करने के लिए इसका उपयोग कर सकते हैं। हालांकि उन्हें ज्यादा इस्तेमाल नहीं किया। यहां के झंडे देखें: http://developer.android.com/reference/android/content/Intent.html

जैसा कि टिप्पणियों में बताया गया है, अगर गतिविधि को खोला जाता है, startActivity()तो कोई इसे बंद कर सकता है finish()। आप ऊपर बटन का उपयोग करना चाहते हैं तो आप में पकड़ कर सकते हैं कि onOptionsSelected(MenuItem item)के खिलाफ आइटम आईडी की जाँच के साथ विधि android.R.id.homeके विपरीत R.id.homeके रूप में टिप्पणी में उल्लेख किया है।


237
या यदि आपने startActivity () के साथ गतिविधि खोली है, तो आप फिनिश के साथ बंद कर सकते हैं () (किसी भी पैरामीटर को पास करने की आवश्यकता नहीं है)
neworld

3
क्या आप स्पष्ट कर सकते हैं कि आप कहां और कैसे उपयोग करते हैं (इसलिए) जब उपयोगकर्ता ऊपर का बटन दबाता है तो यह उन्हें पिछली गतिविधि में ले जाता है
RicNjesh

4
@RicNjesh आपके onOptionsItemSelected मेथड में अगर मेनूइटम पर क्लिक किया गया है तो R.id.home फिर कॉल फिनिश () करें। यह वर्तमान गतिविधि को बंद कर देगा और आपको उस गतिविधि पर वापस ले जाएगा, जिसने इसे शुरुआत के साथ शुरू किया था ()
एंडर्स Ulln'ss

मैं इंटेंट्स के माध्यम से उपयोगकर्ता को एक के बाद एक कई गतिविधियों से गुजर रहा हूँ। क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि ऐप ढेर पर कई गतिविधियों के साथ क्रैश नहीं करता है? धन्यवाद!
रुचिर बरोनिया

1
क्या आप सुनिश्चित हैं कि गतिविधि 1 से पहले आप गतिविधि 2 को समाप्त करने से पहले किसी बिंदु पर नहीं मरेंगे?
user924

225

कोशिश करो Activity#finish()। यह कमोबेश बैक बटन डिफॉल्ट रूप से होता है।


1
क्यों #? या यह एक डॉट है?
नाबिन

8
मुझे विश्वास है कि उनका मतलब थाthis.finish();
जेन्स बोडल

69
#एक संकेत है कि है finish()गतिविधि वर्ग के एक गैर स्थैतिक विधि है। यह मान्य जावा नहीं है, लेकिन यह समझाने में मदद करता है कि कोई कैसे विधि का उपयोग कर सकता है।
ब्रायन हर्बस्ट

2
@ Tanis.7x स्थैतिक तरीकों के लिए संकेतक और है?
Benten

8
@ बेंटेन जो होगा ., यानी:Activity.someStaticMethod()
जॉनी रीव्स

81

बस क्लिक खत्म () पर लिखें । यह आपको पिछली गतिविधि पर ले जाएगा।


1
हालाँकि onBackPressed () साथ ही काम करता है, लेकिन मुझे लगता है कि यह समाधान एक गतिविधि से बाहर निकलने के बारे में सोचने के लिए बेहतर है जिसे आपको बस थोड़ा सा चाहिए .. जैसे मेरे मामले में OCR स्कैनर। धन्यवाद!
जेन बो

यह मेरी जरूरत को पूरा करता है..धन्यवाद।
Roon13

68

सिर्फ यह

super.onBackPressed();

2
यह कॉल वर्तमान गतिविधि को पूरा करता है, इसलिए यह अंतिम गतिविधि दिखाई देगा। हालाँकि, यदि कोई पिछली गतिविधि नहीं है या यह इस बीच नष्ट हो जाती है, तो आवेदन बाहर निकल सकता है।
r1k0

22
यह हैकिश है। आप इसे सीधे कॉल करने वाले नहीं हैं। यह जीवनचक्र विधियों में से एक है और इसे एंड्रॉइड सिस्टम द्वारा बुलाया जाना चाहिए।
धीरज भास्कर

33
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

यह आपको इसके ढेर को रखने और ढेर से इसके बाद की सभी गतिविधियों को साफ करने की पिछली गतिविधि में ले जाएगा।

उदाहरण के लिए, यदि स्टैक A-> B-> C-> D है और आप B को इस ध्वज से प्रारंभ करते हैं, तो स्टैक A-> B होगा


यह मेरे अंत पर काम करता है। काम खत्म करने के लिए क्या कारण होगा पता लगाना पसंद करेंगे।
Relm

20

क्या आप बैक बटन व्यवहार को नियंत्रित करना चाहते हैं? आप दो तरीकों में से एक के माध्यम से बैक बटन (एक विशिष्ट गतिविधि पर जाने के लिए) को ओवरराइड कर सकते हैं।

Android 1.6 और उससे नीचे के लिए:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

या यदि आप केवल Android 2.0 या अधिक समर्थन कर रहे हैं:

@Override
public void onBackPressed() {
    // do something on back.
    return;
}

अधिक जानकारी के लिए: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html


19

वर्तमान गतिविधि समाप्त करने के लिए या onBackPressed द्वारा वापस जाने के लिए इन विधियों को कॉल करें

finish();

या

onBackPressed();

मैं इंटेंट्स के माध्यम से उपयोगकर्ता को एक के बाद एक कई गतिविधियों से गुजर रहा हूँ। क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि ऐप ढेर पर कई गतिविधियों के साथ क्रैश नहीं करता है? धन्यवाद!
रुचिर बरोनिया

13

यदि आप केवल पिछले गतिविधि उपयोग में जाना चाहते हैं तो जाना चाहते हैं

finish();

या

onBackPressed();

यदि आप दूसरी गतिविधि पर या उससे नीचे जाना चाहते हैं, तो निम्न का उपयोग करें:

intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);

1
मैंने पाया कि फिनिश () और ऑनबैकप्रेडेड () दोनों काम करते हैं, लेकिन, मेरे ऐप में कम से कम, फिनिश () बहुत धीमा है और ऑनबैकपेंडेड () बहुत तेज है। जिज्ञासु।
0

मैं इंटेंट्स के माध्यम से उपयोगकर्ता को एक के बाद एक कई गतिविधियों से गुजर रहा हूँ। क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि ऐप ढेर पर कई गतिविधियों के साथ क्रैश नहीं करता है? धन्यवाद!
रुचिर बरोनिया

13

इसे अपने onCLick () विधि में जोड़ें, यह आपकी पिछली गतिविधि पर वापस जाएगा

समाप्त();

या आप इसका उपयोग कर सकते हैं। इसने मेरे लिए पूरी तरह से काम किया

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

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

  return super.onOptionsItemSelected(item);
  }

11

अगर आपके पास गतिविधि माता-पिता के साथ AndroidManifest.xml फ़ाइल सही ढंग से सेटअप है, तो आप उपयोग कर सकते हैं:

NavUtils.navigateUpFromSameTask(this);

जहाँ यह आपकी बाल गतिविधि है।




7

एक ही समस्या है और

finish();  OR super.onBackPressed();

मेरे लिए ठीक काम किया, दोनों ने एक ही काम किया, लेकिन कोई भाग्य नहीं था return


6

आशय का उपयोग करके दूसरी गतिविधि शुरू करें (या तो उपयोग करें startActivityयाstartActivityForResult अपनी आवश्यकताओं के अनुसार)। अब जब उपयोगकर्ता बैक बटन दबाएगा, तो शीर्ष पर वर्तमान गतिविधि बंद हो जाएगी और पिछले दिखाया जाएगा।

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

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


मैं इंटेंट्स के माध्यम से उपयोगकर्ता को एक के बाद एक कई गतिविधियों से गुजर रहा हूँ। क्या मुझे यह सुनिश्चित करने के लिए कुछ भी करने की ज़रूरत है कि ऐप ढेर पर कई गतिविधियों के साथ क्रैश नहीं करता है? धन्यवाद!
रुचिर बरोनिया

5

आप यह कोशिश कर सकते हैं:

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

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

4

डिफ़ॉल्ट रूप से सभी नई गतिविधियों / इरादों में पिछला / पिछला व्यवहार होता है, जब तक कि आपने finish()कॉलिंग गतिविधि पर कोड नहीं किया हो ।


4
@Override
public void onBackPressed() {
    super.onBackPressed();
}

और यदि आप बटन पर क्लिक करना चाहते हैं तो वापस जाएं

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

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

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

      return super.onOptionsItemSelected(item);
 }

कोशिश करें कि यह टूलबार बैक बटन पर हार्डवेयर बैक बटन के रूप में काम करता है ।


2

मेरा सुझाव है कि NavUtils.navigateUpFromSameTask (), यह आसान और बहुत सरल है, आप इसे Google डेवलपर से सीख सकते हैं। मैं आपकी मदद कर सकता हूं!


1

आपकी पिछली गतिविधि पर वापस जाने के लिए कुछ मामले हैं:

केस 1: यदि आप परिणाम को अपनी पिछली गतिविधि में वापस लेना चाहते हैं तो ActivA.java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivityForResult(intent,2);

FBHelperActivity.java

 Intent returnIntent = new Intent();
 setResult(RESULT_OK, returnIntent);
 finish();

केस 2: एक्टिवा -> FBHelperActivity ----> एक्टिवा

ActivityA.java

 Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
               startActivity(intent);

FBHelperActivity.java

after getting of result call finish();
 By this way your second activity will finish and because 
 you did not call finish() in your first activity then
 automatic first activity is in back ground, will visible.

1

पहली बात, आपको यह ध्यान रखने की आवश्यकता है कि, यदि आप पिछली गतिविधि में वापस जाना चाहते हैं। तब आशय का उपयोग करते हुए किसी अन्य गतिविधि पर जाने पर कॉल समाप्त () विधि न करें।

उसके बाद आपके पास वर्तमान गतिविधि से पिछली गतिविधि तक वापस जाने के दो तरीके हैं:

बस कॉल करें: finish()बटन क्लिक श्रोता के तहत, या सिस्टम बैक बटन का उपयोग करके बैक करने के लिए निम्न विधि को ओवरराइड करें:

@Override
public void onBackPressed() {
    super.onBackPressed();
}

0

सभी उल्लिखित उत्तरों के अलावा, उनका अभी भी ऐसा करने का एक वैकल्पिक तरीका है, मान लें कि आपके पास दो वर्ग हैं, वर्ग ए और वर्ग बी।

क्लास ए में आपने कुछ गतिविधियाँ की हैं जैसे चेकबॉक्स सेलेक्ट, कुछ डेटा और आशय का प्रिंट बी। विधि या स्रोत कोड डाउनलोड यह प्रदर्शित करने के लिए

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/

या

http://developer.android.com/reference/android/content/Intent.html


0

बस, पहली गतिविधि में यह कोशिश करें

Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);

अपनी दूसरी गतिविधि में

@Override
public void onBackPressed() {
    this.finish();
}

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