2013-02-13 17 views
27

MainActivity में कुछ बटन हैं। प्रत्येक बटन एक इरादे के माध्यम से एक नई गतिविधि खुलता है। इन गतिविधियों के बाद एक इरादे के माध्यम से MainActivity पर वापस जाने के लिए एक बटन होता है।किसी अन्य गतिविधि से मुख्य गतिविधि पर वापस लौटें

लेकिन जब मैं MainActivity पर वापस जाने के लिए एक बटन दबाता हूं, तो मुझे स्क्रीन पर कुछ प्रकार का मेनू मिलता है! कोई जानता है कि क्या गलत हो सकता है? कुछ मदद कीजिए! धन्यवाद!

संपादित करें:

Button btnReturn1 = (Button) findViewById(R.id.btnReturn1); 
btnReturn1.setOnClickListener(new View.OnClickListener() {  
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Intent returnBtn = new Intent("android.intent.action.MAIN"); 
     startActivity(returnBtn); 
    } 
}); 

मैनिफ़ेस्ट: अन्य गतिविधियों में से एक में वापसी बटन

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.kullaberg.test02" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="10" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Activity1" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.ACTIVITY001" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Activity2" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.ACTIVITY002" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Activity3" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.ACTIVITY003" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

उस बटन का अपना कोड पोस्ट करें। –

+0

क्या आपने मैनिफेस्ट – Shadow

+0

में "एंड्रॉइड: noHistory = true" का उपयोग किया है, अपना कोड साझा करें। – Jan

उत्तर

37

तुम क्यों finish();

कॉल नहीं करते

जब आप गतिविधि में बटन पर क्लिक इस कोड MainActivity

को
btnReturn1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     finish(); 
    } 
}); 
+0

ठीक है! सहायता के लिए धन्यवाद! –

+0

बहुत अच्छा..धन्यवाद :) – CandleCoder

+8

फिनिश() वास्तव में मुख्य गतिविधि में लौटने में मदद नहीं करता है, यह केवल वर्तमान गतिविधि –

8

उपयोग

Intent returnBtn = new Intent(getApplicationContext(), 
        MainActivity.class); 

startActivity(returnBtn); 

बनाने के मुख्य गतिविधि के +०१२३५८२९३६ एंड्रॉइड मैनिफेस्ट मेंसे singleTask यदि आप हर बार नया निर्माण नहीं करना चाहते हैं।

android:launchMode="singleTask" 
1
बजाय startActivity के माध्यम से फिर से शुरू करने की MainActivity

, खत्म() के बजाय अन्य गतिविधियों में फोन MainActivity को वापस पाने के लिए ... के रूप में MainActivity ढेर में पहले से ही है

0

उपयोग वापस जाने के लिए और चाहते हैं एक और करने के लिए वापस लौटने के गतिविधि केवल इरादे में झंडा सेट करके पिछली गतिविधि को खत्म करें, फिर स्टैक में केवल एक गतिविधि डालें और पिछले को नष्ट कर दें।

Intent i=new Intent("this","YourClassName.Class"); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(i); 
+0

क्या आप अपने कोड में कुछ टिप्पणियां जोड़ सकते हैं? यह ओपी और अन्य आगंतुकों को इसे समझने में मदद करता है। इसे जांचें [मेटाएसओ प्रश्न] (http://meta.stackexchange.com/questions/7656/how-do-i-write-a-good-answer-to-a-question) और [जॉन स्कीट: कोडिंग ब्लॉग] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx) सही उत्तर देने के तरीके पर। – Yaroslav

37

यहाँ तुम क्यों कोड आप अपने onClick विधि में सूचीबद्ध के साथ मेनू देखा है:

आप निर्माता कि की कार्रवाई पैरामीटर के लिए एक स्ट्रिंग लेता है के साथ एक आशय निर्माण कर रहे थे Intent के IntentFilter। आपने "android.intent.action.MAIN" को उस कन्स्ट्रक्टर के तर्क के रूप में पारित किया है, जो निर्दिष्ट करता है कि Intent किसी भी Activity से <action="android.intent.action.MAIN"> सहित इंटेंटफ़िल्टर से संतुष्ट हो सकता है।

जब आप कि Intent साथ startActivity कहा जाता है, आप को प्रभावी ढंग से लगता है जाने के लिए Android ओएस बताया एक Activity कि android.intent.action.MAIN कार्रवाई निर्दिष्ट करता है (सिस्टम पर स्थापित किसी भी एप्लिकेशन में)। जब कई गतिविधियां योग्य होती हैं (और इस मामले में के बाद से ऐप में IntentFilter के साथ "android.intent.action.MAIN" एक्शन सहित) होगा, ओएस उपयोगकर्ता को यह चुनने के लिए मेनू प्रस्तुत करता है कि कौन से ऐप का उपयोग करना है।

आपकी मुख्य गतिविधि पर वापस जाने के तरीके के सवाल के रूप में, अधिकांश चीजों के साथ, यह आपके ऐप के विनिर्देशों पर निर्भर करता है। स्वीकार्य उत्तर शायद आपके मामले में काम करता है, मुझे नहीं लगता कि यह सबसे अच्छा समाधान है, और शायद यह आपको अपने एंड्रॉइड ऐप में एक गैर-मूर्खतापूर्ण यूआई का उपयोग करने के लिए प्रोत्साहित कर रहा है।यदि आपकी Button की onClick() विधि में केवलfinish() पर कॉल है तो आपको यूआई से Button को हटा देना चाहिए और उपयोगकर्ता को हार्डवेयर/सॉफ़्टवेयर बैक बटन को धक्का देना चाहिए, जिसमें समान कार्यक्षमता है और एंड्रॉइड के लिए मूर्खतापूर्ण है। (आप अक्सर आईओएस UINavigationController नेविगेशनबार के व्यवहार को अनुकरण करने के लिए प्रयुक्त बटन देखेंगे जो एंड्रॉइड ऐप्स में निराश है)।

अपने मुख्य गतिविधि क्रियाएँ के ढेर की शुरूआत और आप बार-बार वापस बटन दबाए बिना वापस मुख्य गतिविधि को पाने के लिए एक आसान तरीका प्रदान करने के लिए चाहते हैं, तो आप झंडा Intent.FLAG_ACTIVITY_CLEAR_TOP जो सभी बंद हो जाएगा सेट करने के बाद startActivity कॉल करना चाहते हैं कॉल स्टैक में गतिविधियां जो आपकी मुख्य गतिविधि से ऊपर हैं और कॉल स्टैक के शीर्ष पर आपकी मुख्य गतिविधि लाती हैं। नीचे (यह मानते हुए अपने मुख्य गतिविधि उपवर्ग MainActivity कहा जाता है देखें:

btnReturn1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     Intent i=new Intent(this, MainActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(i); 
    } 
)}; 
+0

बहुत अच्छी व्याख्या! मेरे "मुख्य क्रियाशीलता पर लौटें" की ज़रूरतों के लिए, 'प्रारंभिकता (नया इरादा (यह, मुख्य गतिविधि। वर्ग) .setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP));' पूरी तरह से काम किया। – Jonik

+0

यदि आप 'फिनिश()' का उपयोग करने की आवश्यकता होती है तो यह समझा जा सकता है कि यह बहुत अच्छा हो सकता है। – PhoneixS

+0

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

1

मैं अत्यधिक Intent.FLAG_ACTIVITY_CLEAR_TOP ध्वज पर डॉक्स पढ़ने की सलाह इसका इस्तेमाल करते हुए नहीं जरूरी पहले (main) गतिविधि के लिए सभी तरह से वापस जाना होगा।। झंडा केवल Intent में दी गई गतिविधि वर्ग तक सभी मौजूदा गतिविधियों को हटा देगा यह डॉक्स में अच्छी तरह से समझाया गया है:। (गतिविधि अग्रभूमि में ले जाया जा करने के लिए सेट कर सकते हैं

For example, consider a task consisting of the activities: A, B, C, D. 
If D calls startActivity() with an Intent that resolves to the component of 
activity B, then C and D will be finished and B receive the given Intent, 
resulting in the stack now being: A, B. 

ध्यान दें कि यानी, सभी समाशोधन इसके शीर्ष पर अन्य गतिविधियां), और उसके बाद भी पुनः लॉन्च किया जा रहा है, या केवल onNewIntent() विधि कहा जाता है।

Source

4

मैं इसे इस्तेमाल किया हूँ और पूरी तरह से काम किया ...

startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 

क्योंकि समाप्त() 2 गतिविधियों, कई गतिविधियों

1

यह आमतौर पर के रूप में अच्छी तरह से काम करता है के लिए नहीं करने के लिए उपयोग करें:)

navigateUpTo(new Intent(getBaseContext(), MainActivity.class)); 
संबंधित मुद्दे