2012-08-04 18 views
6

की बजाय होम स्क्रीन पर जाएं मुझे पता है कि इस सवाल से कई बार पूछा गया है, लेकिन कोई भी समाधान काम नहीं कर रहा है और मेरी स्थिति थोड़ा अलग है।पिछली गतिविधि

मेरे पास Activity है जिसे कई अलग-अलग गतिविधियों से बुलाया जा सकता है। लेकिन मैं चाहता हूं कि पिछली गतिविधि के बजाए उपयोगकर्ता वापस बटन दबाए, ऐप को होम स्क्रीन पर जाना चाहिए।

StartActivityFromResult() का उपयोग करने का एक तरीका लेकिन फिर मुझे इसे प्रत्येक कॉलिंग गतिविधि में उपयोग करना होगा।

+0

यू बटन रख सकते जब बटन दबाता है तो वह अपने आप HME पृष्ठ पर जाता है ... आशय मैं = नए आशय (AccountActivity.this, ContactsActivity.class); startActivity (i); – shassss

+1

"लेकिन मैं चाहता हूं कि पिछली गतिविधि के बजाए उपयोगकर्ता वापस बटन दबाए, ऐप को होम स्क्रीन पर जाना चाहिए" - क्योंकि यह संभव नहीं है कि * उपयोगकर्ता * यह चाहेगा, आपको ऐसा क्यों लगता है कि यह उचित व्यवहार है? – CommonsWare

+0

जिस गतिविधि का मैं उल्लेख कर रहा हूं वह एक संगीत प्लेयर की प्लेयर स्क्रीन है। मैं चाहता हूं कि जब उपयोगकर्ता प्लेलिस्ट से गाना चुनता है तो ऐप प्लेयर एक्टिवेटी पर जाएगा। लेकिन जब खिलाड़ी से बैक बटन दबाया जाता है तो प्रवाह होम स्क्रीन पर या किसी अन्य ऐप पर जाता है जिसे उपयोगकर्ता ने पहले खोला था।उम्मीद है कि मैंने सवाल समझाया है। – reiley

उत्तर

23

आप निम्नानुसार बैकप्रेस विधि को ओवरराइड कर सकते हैं। यह काम करना चाहिए।

public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
     startMain.addCategory(Intent.CATEGORY_HOME); 
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(startMain); 

} 
+0

धन्यवाद .. यह काम किया .. लेकिन क्या होगा यदि उदाहरण के लिए मैं अपने आवेदन से पहले संदेश एप्लिकेशन का उपयोग कर रहा था और मैंने होम कुंजी दबाया और फिर मेरा ऐप खोला। अब अगर मैं वापस कुंजी दबाता हूं तो मैं पहले खोले गए ऐप (इस तरह से मैसेजिंग) पर कैसे लौट सकता हूं? – reiley

+0

यदि आप उस मेल एप्लिकेशन के गतिविधि का नाम और पैकेज जानते हैं, तो आप उस गतिविधि को अपने ऑनबैकप्रेस विधि से कॉल कर सकते हैं। – android

+0

मैंने इसे अन्य स्थानों पर देखा है कि इसकी अनुशंसा नहीं की जाती है। – Enigma

0

बस एक इरादा सीधे घर भेजें। यह उस इरादे की कार्रवाई और श्रेणी को निर्धारित करने के माध्यम से किया जा सकता है।

विवरण के लिए इरादे पर दस्तावेज़ीकरण की जांच करें।

-3
 Button btn = (Button) findViewById(R.id.button2); 
     btn.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) 
       { 
      Intent i = new Intent(AccountActivity.this, HomeActivity.class); 
        startActivity(i); 
       } 
      }); 
+0

यह गलत है। कोई होम एक्टिविटी क्लास नहीं है जिसे आप कॉल कर सकते हैं। या तो मेरी पोस्ट या @android पोस्ट का संदर्भ लें। – JoxTraex

2

तुम भी बस गतिविधि पर finish() विधि कह सकते हैं।

+0

मैं इस दृष्टिकोण का उपयोग करने की अनुशंसा नहीं करूंगा क्योंकि 1. संभवतः ऑपरेशन सिस्टम गतिविधि के 'ऑनस्ट्रोय' कॉलबैक को कॉल करेगा जो आपके बैक स्टैक लॉजिकल ऑर्डर को दूषित करेगा। 2. यदि आपकी गतिविधि 'startActivityForResult' विधि का उपयोग करके किसी अन्य गतिविधि द्वारा बुलाया जाता है, तो यह कॉलिंग गतिविधि' atActivityResult' कॉलबैक 'को कॉल करेगा। – Eido95

1

और यदि आप अपनी गतिविधि को वापस नहीं करना चाहते हैं तो आप इस गतिविधि को जोड़ना चाहते हैं जहां आपने बटन दबाया था, फिर कोड के नीचे केवल finish()

public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
    finish(); 
} 
0

यह अगर आप किसी गतिविधि को है और आप बी, सी और Home_Fragment की तरह 3 टुकड़े कर सिर्फ सरल है। अब, यदि आप खंड बी या सी में हैं और वापस बटन दबाएं तो आप होम_फ्रैगमेंट पर हर बार स्थानांतरित करना चाहते हैं।
तो फिर तुम सिर्फ गतिविधि एक में onBackPressed() विधि ओवरराइड करने के लिए है और यह भी जब आप किसी भी टुकड़ा के लिए कूद, तो एक विशिष्ट टैग या नाम देना है, तो आप गतिविधि ए में है कि टुकड़ा पहचान लेंगे

मैं दे रहा हूँ उदाहरण आप आसानी से समझ सकते हैं कि:

टुकड़ा सी

if (savedInstanceState == null) { 
    getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new C_fragment(),"xyz").commit(); 
} 

को गतिविधि एक से आगे बढ़ते या आप टुकड़ा बी से आगे बढ़ रहे हैं, तो सी खंड के लिए, और वापस प्रेस पर, आप टुकड़ा डी पर आने के लिए नीचे दिए गए पसंद करते हैं:

btn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     getActivity().getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new C_frament(), "xyz").commit(); 
     ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Fragment C"); 
    } 
}); 

अब तुम सिर्फ onBackPressed() में विधि ओवरराइड करने के लिए है मुख्य गतिविधि इस प्रकार है:

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager =getSupportFragmentManager(); 

    if (((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")) != null 
      && ((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")).isVisible()) { 

     Fragment fragment = new Home_Fragment(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment) 
       .commit(); 
     getSupportActionBar().setTitle("Home fragment "); 

    } else { 
     super.onBackPressed(); 
    } 
} 
संबंधित मुद्दे