„Android“: išvalykite atgal

„Android“ turiu keletą veiksmų, tarkim, A, B, C.

A, naudoju šį kodą B:

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

B, naudoju šį kodą, kad atidarytumėte C:

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

Kai vartotojas paspaudžia mygtuką C, noriu grįžti į A ir išvalyti nugarą (uždaryti B ir C). Todėl, kai vartotojas nuspaudžia grįžimo mygtuką B ir C, nebandau, bandžiau:

 Intent intent = new Intent(this, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

Bet B ir C vis dar rodomi, jei naudoju atgalinį mygtuką, kai grįšiu į A sesiją. Kaip tai išvengti?

288
26 апр. nustatė Martin, balandžio 26 d. 2011-04-26 21:03 '11, 21:03 2011-04-26 21:03
@ 32 atsakymai
  • 1
  • 2

Pabandykite pridėti FLAG_ACTIVITY_NEW_TASK kaip aprašyta FLAG_ACTIVITY_CLEAR_TOP dokumentuose:

Šis paleidimo režimas taip pat gali būti naudojamas geram efektui kartu su FLAG_ACTIVITY_NEW_TASK: jei naudojate užduoties šakninę veiklą, ji pradės dabartinį užduoties egzempliorių pirmoje vietoje ir tada išvalys šakninę būseną. Tai ypač naudinga, pvz., Pradedant veiklą iš pranešimo tvarkyklės.

Taigi, jūsų kodas, skirtas rodyti A bus toks:

 Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); // call this to finish the current activity 
393
26 апр. Atsakymas, kurį pateikė Jake Basile Apr 26 2011-04-26 21:10 '11, 9:10 pm 2011-04-26 21:10
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 
border=0
134
03 дек. atsakymas suteiktas dyzelino 03 d. 2012-12-03 23:10 '12, 23:10, 2012-12-03 23:10

Kaip pridėti prie manifesto failo susijusios veiklos:

 android:noHistory="true" 

nustatyti B ir C veiklą? Jie nebus pridėti prie nugaros. Nežinote, ką tai yra.

72
28 июня '11 в 23:38 2011-06-28 23:38 atsakymas pateikiamas cirrus birželio 28 d. 11 val. 23:38 2011-06-28 23:38

Tai ilgai trukdo man. Galiausiai nusprendžiau tai padaryti:

Naudojant fragmentą:

 Intent intent = new Intent(view.getContext(), A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Intent.FLAG_ACTIVITY_CLEAR_TASK naudokite (pridėkite kitą ketinimų vėliavą Intent.FLAG_ACTIVITY_CLEAR_TASK palyginti su fragmentu):

 Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 
53
11 июля '14 в 10:46 2014-07-11 10:46 atsakymą pateikė Geng Jiawen, liepos 11 d. 14, 10:46 2014-07-11 10:46
  • Pridėkite „ android:launchMode="singleTop" į savo veiklos manifestą veiklai A
  • Tada naudokite intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ir intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) kai pradedate veiklą A

Tai reiškia, kad paleidus „A“ veiklą, visos jos viršutinės užduotys išvalomos, todėl A yra viršuje. Naujas atgal stack sukuriamas naudojant A šaknį, o naudojant „ singleTop užtikrinsite, kad jūs kada nors paleisite „A“ (nes A dabar yra viršuje dėl ..._CLEAR_TOP ).

28
26 апр. Joseph Earl atsakymas, pateiktas balandžio 26 d 2011-04-26 21:35 '11 prie 21:35 2011-04-26 21:35

Pradedant nuo API 16 („Jelly Bean“), galite tiesiog paskambinti „ finishAffinity() .

Dabar taip pat galite skambinti „ ActivityCompat.finishAffinity(Activity activity) naudodami suderinamumo biblioteką.

Būtinai nustatykite užduoties parametro parametrą manifesto paketo pavadinime, kuris yra unikalus šiai veiksmų grupei.

Žr. Papildomą informaciją:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29

25
30 мая '13 в 1:58 2013-05-30 01:58 Atsakymą pateikė Daniel Schuler , gegužės 30 d. 13, 13:58 2013-05-30 01:58

Pabandykite naudoti

 intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

ir ne

 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
14
16 мая '13 в 10:58 2013-05-16 10:58 Muhammad Aamir Ali atsakymas gegužės 16 d. 13 val. 10:58 2013-05-16 10:58

Jei jūsų paraiškos minimali sdk versija yra 16, galite naudoti apdailąAffinity ()

Atlikite šį veiksmą, taip pat visus veiksmus, kurie yra tiesiogiai po juo dabartinėje užduotyje, esant tokiam pačiam artumui.

Tai yra mano darbas. Ekrane „Mokėjimo mokėjimas“ ištrinkite visus veiksmus, susijusius su grįžimo žetonu,

  @Override public void onBackPressed() { finishAffinity(); startActivity(new Intent(PaymentDoneActivity.this,Home.class)); } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29

8
13 апр. Atsakymas Jaydeep purohit Bal. 13 2016-04-13 15:42 '16 at 15:42 pm 2016-04-13 15:42

Būsimiems tyrimams išbandykite šį kodą.

 Intent intent = new Intent(context, LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 
7
17 мая '15 в 6:09 2015-05-17 06:09 atsakymą pateikė GeetT gegužės 17 d., 15 val., 06:09 2015-05-17 06:09

Kaip „ Wakkapašalinimo veikla iš istorijos steko ...


android:noHistory="true" AndroidManifest.xml android:noHistory="true" pridėkite android:noHistory="true" atributą <activity> :

  <activity android:name=".MyActivity" android:noHistory="true"> </activity> 
6
22 авг. Richard Le Mesurier atsakymas rugpjūčio 22 d 2012-08-22 17:58 '12, 17:58, 2012-08-22 17:58

Naudokite apdailąAffinity (); užduotyje C, kai vykdote užduotį A, kad išvalytumėte atgalinės pakuotės operacijas.

6
15 дек. Atsakymas pateikiamas baswaraj 15 d. 2016-12-15 17:49 '16 at 17:49 PM 2016-12-15 17:49

Naudokite šį kodą, kad pradėtumėte naują veiklą, ir uždarykite ar sunaikintumėte visus kitus stendus arba htc failus.

 Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 
4
10 марта '17 в 13:10 2017-03-10 13:10 atsakymas pateikiamas Pankaj Talaviya kovo 10–17 d. 13:10 2017-03-10 13:10

Čia rasti šiek tiek apgaulingų atsakymų, nes kodo šaltinio klausimas man atrodo gerai.

A yra šakninė veikla, pradedant nuo B arba C tik su FLAG_ACTIVITY_CLEAR_TOP pašalina B ir C iš nugaros kamino.

3
14 дек. Ianjoyner atsakymas: gruodžio 14 d. 2011-12-14 14:15 '11 at 14:15 2011-12-14 14:15

Cotlin, tai beveik tokia pati kaip Java. Tik | simbolis pakeičiamas arba tekstas. Taigi, jis parašytas kaip

 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) 
3
23 янв. atsakymas pateikiamas Exigente05 23 sausio. 2019-01-23 23:59 „19, 23:59 p. 2019-01-23 23:59
 Use finishAffinity() to clear all backstack with existing one. Suppose, Activities A, B and C are in stack, and finishAffinity(); is called in Activity C, - Activity B will be finished / removing from stack. - Activity A will be finished / removing from stack. - Activity C will finished / removing from stack. 
3
28 окт. atsakymą pateikė Firzan Shaikh spalio 28 d. 2017-10-28 09:53 '17 at 9:53 2017-10-28 09:53

Man atrodo, kad jums reikia pradėti Activity C su Activity B naudodami startActivityForResult() . Kai spustelėsite Activity C setResult(RESULT_OK) mygtuką, skambinkite setResult(RESULT_OK) ir setResult(RESULT_OK) finish() , todėl Activity C baigiasi. Activity B galite atsakyti į onActivityResult() , taip pat skambindami finish() ir tada grįžti į Activity A

2
26 апр. atsakymą pateikė maximus 26 balandis. 2011-04-26 21:06 '11, 21:06 2011-04-26 21:06

Radau įdomų sprendimą, kuris gali padėti. Aš tai padariau savo „ onBackPressed() .

 finishAffinity(); finish(); 

FinishAffinity pašalina esamo veiksmo sujungimą su jo krūva. Ir tada apdaila padės jums išeiti iš šios pamokos. Kuris išeina iš programos.

2
12 сент. Atsakymą duoda Sujit Royal 12 sep . 2018-09-12 13:01 '18 - 01.01. 2018-09-12 13:01

Šiuo atveju Intent.FLAG_ACTIVITY_CLEAR_TOP neveiks. Naudokite (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)

Daugiau informacijos rasite šiame dokumente.

2
01 апр. atsakymą pateikė Ashish Saini 01 Bal. 2016-04-01 10:47 '16 at 10:47 2016-04-01 10:47

logout.addFlags (intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (intent.FLAG_ACTIVITY_NEW_TASK);

1
26 сент. Atsakymas, kurį Abhijeet pateikė rugsėjo 26 d. 2013-09-26 17:30 '13, 5:30 val. 2013-09-26 17:30

Bandžiau visus sprendimus, ir niekas manęs nedirbo. Mano sprendimas:

Paskelbkite Activity A kaip [android:launchMode="singleTop"] naudodami „Android“ manifestą [android:launchMode="singleTop"] .

Dabar prijunkite toliau išvardytas vėliavas, kai A iš bet kurios vietos. Jis išvalys kaminą.

 Intent in = new Intent(mContext, A.class); in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK ); startActivity(in); finish(); 
1
19 апр. atsakymas pateikiamas Tarun 19 d. 2016-04-19 08:41 '16 at 8:41 am 2016-04-19 08:41

Šį pavyzdį galima naudoti, kad būtų galima skambinti Activity AActivity C

Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);

1
12 июля '16 в 14:55 2016-07-12 14:55 atsakymą pateikė Vipinas Yadavas liepos 12 d., 16 val. 14:55 2016-07-12 14:55

Į manifestą

 android:launchMode="singleTask" 

ir

 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 
0
27 сент. atsakymas suteikiamas „ blackjack“ 27 sep. 2016-09-27 13:41 '16 at 13:41 pm 2016-09-27 13:41

Arba pridėkite ją prie savo Activity B ir Activity C

 android:noHistory="true" 

arba Override onBackPressed kad vėl onBackPressed return .

 @Override public void onBackPressed() { return; } 
0
01 апр. atsakymą pateikė Renjith JR 01 balandžio. 2016-04-01 12:27 '16 at 12:27 pm 2016-04-01 12:27

Jis dirbo su „onBackPressed“:

 public void onBackPressed() { Intent intent = new Intent(ImageUploadActivity.this, InputDataActivity.class); Intent myIntent = new Intent(this, ImageUploadActivity.class); myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); } 
0
12 марта '18 в 14:56 2018-03-12 14:56 Atsakymą pateikė PhilipS kovo 12 d. 18 val. 15:56. 2018-03-12 14:56

Naudokite „setFlags“ () metodą, kad išvalytumėte nugaros pusę, atidarytumėte visus veiksmus ir paleistumėte savo „Acetvity“

 Intent intent = new Intent(getApplicationContext(), yourActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 
0
07 сент. Atsakymą pateikė Pankaj Talaviya 07 rugsėjis 2017-09-07 08:03 '17, 08:03 2017-09-07 08:03

Įtraukite NO History vėliavą.

B veiksme paleiskite veiksmą C, kaip parodyta žemiau → → →

 Intent intent = new Intent(this, C.class); intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish(); 
0
10 июня '15 в 9:15 2015-06-10 09:15 atsakymą įteikė Arun Sharma , birželio 10 d. 15 val. 9:15 2015-06-10 09:15

Pradėjęs naują ketinimą, aš pašaukiau activity_name.this.finish() ir jis dirbo man.

 I tried "FLAG_ACTIVITY_CLEAR_TOP" and "FLAG_ACTIVITY_NEW_TASK" 

Bet tai man neveikia ... Nerekomenduoju naudoti šio sprendimo, bet jei diegimo vėliava jums neveikia, galite ją išbandyti. Bet aš vis tiek rekomenduoju nenaudoti.

0
31 окт. Atsakymas pateikiamas „ Swap-IOS-Android 31“. 2014-10-31 15:08 '14, 15:08 2014-10-31 15:08

Be FLAG_ACTIVITY_CLEAR_TOP galite pabandyti pridėti Intent.FLAG_ACTIVITY_SINGLE_TOP :

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

0
26 апр. atsakymas pateikiamas binnyb 26 balandžio. 2011-04-26 21:11 '11, 21:11, 2011-04-26 21:11

Šis kodas veikia tinkamai. Bandžiau taikyti mėginio taikymo ciklą.

Po A veiklos su vėliava FLAG_ACTIVITY_CLEAR_TOP

0
28 янв. Sathesh atsakė sausio 28 d 2013-01-28 12:05 '13, 12:05, 2013-01-28 12:05
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
0
19 февр. Atsakymas, kurį pateikė Mujeeb Rahaman T 19 vasaris 2019-02-19 14:33 '19, 14:33 pm 2019-02-19 14:33
  • 1
  • 2