2011-12-25 16 views
148

मैं एंड्रॉइड पर ऐसा करना चाहता हूं: मूल रूप से जब फोन पर बैक बटन दबाया जाता है, तो मैं एक विशिष्ट गतिविधि को अपने पिछले एक पर वापस लौटना चाहता हूं।एंड्रॉइड: पिछली गतिविधि पर वापस जाने से रोकना

विशेष रूप से, मेरे पास लॉगिन और साइन अप स्क्रीन है, दोनों सफल लॉगिन/साइनअप होने पर HomeScreen नामक एक नई गतिविधि शुरू करते हैं। एक बार होमस्क्रीन शुरू हो जाने के बाद, मैं उपयोगकर्ताओं को लॉगिन वापस करने या बैक कुंजी दबाकर स्क्रीन को साइन करने में सक्षम होना चाहता हूं।

मैंने Intent.FLAG_ACTIVITY_NO_HISTORY का उपयोग करने की कोशिश की लेकिन चूंकि एप्लिकेशन में फेसबुक एकीकरण है, जब 'फेसबुक के साथ लॉगिन' का उपयोग किया जाता है, तो फेसबुक को प्रारंभिक लॉगिन स्क्रीन पर वापस जाना चाहिए, इसलिए मुझे इन गतिविधियों का इतिहास रखना चाहिए।

मैं HomeScreen पर वापस बटन का व्यवहार अधिभावी जब बटन दबाया जाता है सीधे आवेदन को समाप्त करने के बारे में सोचा और मैं

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

थे, लेकिन वह भी काम नहीं करता।

मैं एंड्रॉइड विकास में काफी नया हूं, इसलिए कोई भी मदद बहुत उपयोगी होगी।

अग्रिम धन्यवाद।

+0

बस स्पष्ट करने के लिए काम कर रहा है, तो आप वापस फेसबुक को छोड़कर हर किसी के लिए व्यवहार पर कब्जा करने की कोशिश कर रहा है? – havexz

+0

कुछ हद तक हां, लेकिन वास्तव में जो मैं चाहता हूं वह सफल लॉगिन होने के बाद होता है और होमस्क्रीन खुलता है, उपयोगकर्ता बैक बटन दबाकर लॉगिन स्क्रीन पर वापस नहीं जा सकता है। उदाहरण के लिए ट्विटर या फोरस्क्वेयर की तरह, एक बार जब हम उन ऐप्स में लॉग इन करते हैं, तो हम लॉग इन पेज नहीं देखते हैं जब तक हम लॉग ऑफ नहीं करते हैं (भले ही हम लॉग इन करने के बाद वापस दबाएं)। – ecem

उत्तर

267

मेरा सुझाव उस गतिविधि को समाप्त करना होगा जो आप नहीं चाहते हैं कि उपयोगकर्ता वापस जाएं। उदाहरण के लिए, आपके साइन इन गतिविधि में, startActivity पर कॉल करने के ठीक बाद, finish() पर कॉल करें। जब उपयोगकर्ता बैक बटन दबाते हैं, तो वे साइन इन गतिविधि में नहीं जा पाएंगे क्योंकि यह ढेर से मारा गया है।

+11

हाँ जो मैं चाहता था! कॉलिंग 'फिनिश()' जब मैं उस गतिविधि के साथ कर रहा हूं तो पूरी तरह से वापस जाने से रोकता है। आपका बहुत बहुत धन्यवाद! – ecem

+1

क्या होगा अगर मैं पिछली गतिविधि में धागा चलाना चाहूंगा? – AlleyOOP

+0

तब आप मेरे दृष्टिकोण के साथ नहीं जाना चाहेंगे। कॉलिंग फिनिश() गतिविधि को मारने जा रहा है। क्या आप अपनी प्रक्रिया शुरू कर सकते हैं जिसे आप उस गतिविधि में चलाने के लिए चाहते हैं जिसे आप जा रहे हैं? – coder

28

मुझे यकीन नहीं है कि आप वास्तव में क्या चाहते हैं, लेकिन ऐसा लगता है कि यह संभव होना चाहिए, और यह भी लगता है कि आप पहले से ही सही रास्ते पर हैं।

Disable back button in android

MyActivity.java => 
    @Override 
    public void onBackPressed() { 

     return; 
    } 

How can I disable 'go back' to some activity?

AndroidManifest.xml => 
<activity android:name=".SplashActivity" android:noHistory="true"/> 
+1

मैं फेसबुक समस्या के कारण नोहिस्ट्री विकल्प का उपयोग नहीं कर सकता, जिसे मैंने अपने प्रश्न में व्याख्या करने की कोशिश की और टिप्पणियों में से एक भी। लेकिन बैक बटन वाली चीज इसे अक्षम नहीं कर रही है, लेकिन इसे 'System.exit (0)' जैसे पूरे एप्लिकेशन से बाहर निकलने के लिए कहा जाता है (मुझे पता है कि यह सबसे अच्छा अभ्यास नहीं है, लेकिन मैं सिर्फ एक उदाहरण देना चाहता था)। – ecem

+1

शून्य से वापस? –

5

finish() वर्तमान गतिविधि बंद करने के लिए नहीं पूरे आवेदन आप विधि देता है:

यहाँ कुछ लिंक है कि मदद कर सकता है कर रहे हैं। और आप बेहतर आवेदन को मारने के तरीकों की तलाश करने की कोशिश नहीं करते हैं। छोटी सलाह

क्या आपने Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY के संयोजन की कोशिश की है? गतिविधि शुरू करने के Intent में इस झंडे का उपयोग करना याद रखें!

+1

'FLAG_ACTIVITY_NO_HISTORY' फेसबुक के साथ लॉगिन करते समय फेसबुक के कॉलबैक को कैप्चर करने के लिए मेरे लॉगिनस्क्रीन को रोकता है। चूंकि एक बार फोकसस्क्रीन से फोकस खत्म हो जाता है, इसे फिर से शुरू नहीं किया जा सकता है (क्योंकि कोई इतिहास नहीं है)। लेकिन मैंने इसे 'Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS' के साथ नहीं देखा है, मैं इसे देख लूंगा, धन्यवाद! – ecem

+0

'फिनिश()' विधि के बारे में भी धन्यवाद, मुझे इसके बारे में पता नहीं था। – ecem

2

paulsm4 का उत्तर सही है। यदि onBackPressed() में आप बस वापस आते हैं, तो यह बैक बटन अक्षम कर देगा। हालांकि, मुझे लगता है कि आपके उपयोग के मामले में एक बेहतर दृष्टिकोण गतिविधि तर्क को फ़्लिप करना है, यानी अपनी घरेलू गतिविधि को मुख्य बनाएं, जांचें कि क्या उपयोगकर्ता वहां साइन इन है, यदि नहीं, तो साइन इन गतिविधि शुरू करें। इसका कारण यह है कि यदि आप अपनी मुख्य गतिविधि में बैक बटन को ओवरराइड करते हैं, तो अधिकांश उपयोगकर्ता उलझन में होंगे जब वे वापस दबाएंगे और आपका ऐप कुछ भी नहीं करेगा।

80

निम्नलिखित समाधान सामान्य लॉगिन/मुख्य गतिविधि परिदृश्य में या अवरुद्ध स्क्रीन को लागू करने में बहुत उपयोगी हो सकता है।

वापस पिछले गतिविधि के लिए जा रहा बजाय एप्लिकेशन को कम से कम करने के लिए, आप onBackPressed() इस तरह ओवरराइड कर सकते हैं:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

moveTaskToBack(boolean nonRoot) अपनी पीठ ढेर छोड़ देता है के रूप में यह है, बस पृष्ठभूमि में अपने काम के लिए (सभी गतिविधियों) डालता है। वैसे ही जैसे उपयोगकर्ता ने होम बटन दबाया।

पैरामीटर boolean nonRoot - यदि गलत है तो यह केवल तभी काम करता है जब गतिविधि किसी कार्य की जड़ है; यदि सही है तो यह किसी कार्य में किसी भी गतिविधि के लिए काम करेगा।

+7

बढ़िया काम करता है! वास्तव में मुझे क्या चाहिए। धन्यवाद! – avb

+0

इससे मेरी मदद की। धन्यवाद! – Shami

+0

यह वह उत्तर है जो काम करता है। – Everett

0

finish(); 

तुरंत रखो ActivityStart के बाद गतिविधि इसे वापस लिए जाने के किसी भी तरह से रोकने को रोकने के लिए। फिर गतिविधि आप शुरू कर रहे हैं करने के लिए

onCreate(){ 
    getActionBar().setDisplayHomeAsUpEnabled(false); 
    ... 
} 

जोड़ें।

1

बस ऑनडाउन विधि को ओवरराइड करें और जांचें कि बैक बटन दबाया गया था या नहीं।

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     //Back buttons was pressed, do whatever logic you want 
    } 

    return false; 
} 
3

रखो finish() बस के बाद

Intent i = new Intent(Summary1.this,MainActivity.class); 
      startActivity(i); 
finish(); 
0

तुम वापस आपके आवेदन पर सभी गतिविधियों पर जाने के लिए नहीं करना चाहते हैं, तो आप उपयोग कर सकते हैं

android:launchMode="singleTask" 

यहाँ और अधिक जानें: http://developer.android.com/guide/topics/manifest/activity-element.html

7

आपके मामले के लिए दो समाधान हैं जैसे गतिविधि ए गतिविधि बी के लिए टार्ट, लेकिन आप गतिविधि बी में गतिविधि ए पर वापस नहीं आना चाहते हैं बी

1. पिछले गतिविधि को पीछे की ओर से हटा दिया गया।

Intent intent = new Intent(activityA.this, activityB.class); 
    startActivity(intent); 
    finish(); // Destroy activity A and not exist in Back stack 

2. विकलांग वापस जाने के लिए बटन कार्रवाई।

वहाँ नीचे के रूप में घटना वापस जाने को रोकने के लिए दो तरीके,

1) सिफारिश दृष्टिकोण

@Override 
public void onBackPressed() { 
} 

2) ओवरराइड OnKeyDown विधि

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

आशा है कि है उपयोगी लेकिन अभी भी आपकी परिस्थितियों पर निर्भर करता है।

शुभकामनाएं @।@

लूना

1

इस विधि ठीक

Intent intent = new Intent(Profile.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
संबंधित मुद्दे