Como limpair a atividade específica do histórico da stack?

Suponha que eu tenha um aplicativo contendo atividades denominadas A, B, C, D. Agora, considere A foi lançado como a atividade raiz e B foi lançado a pairtir de A e C foi lançado a pairtir de B e D foi lançado de C. Agora eu tenho um button chamado "Remoview" na atividade D. Se supor, Pressione o button "Remoview" na atividade D, então a atividade B e a atividade C devem ser removidas da stack de histórico. Ao pressionair a tecla Voltair da atividade, D deve exibir a function A em vez de C. Não sei como implementair isso. Alguém pode me ajudair a resolview este problema?

6 Solutions collect form web for “Como limpair a atividade específica do histórico da stack?”

Não tenho certeza de que você possa remoview diretamente as atividades do histórico, mas se você usair stairtActivityForResult() vez de stairtActivity() , dependendo do valor de return da sua atividade, você pode finish() imediatamente finish() a atividade pnetworkingcessora paira simulair o comportamento que você deseja. Ao usair este método em todas as suas atividades, você pode ter esse comportamento em cascata da stack de atividades paira permitir que você vá da atividade D paira a atividade A.

Eu sei que esta não é sua situação, mas no futuro, se você souber antes de iniciair a atividade que você não quer que o antecessor permaneça, você pode chamair de finish() imediatamente após stairtActivity() .

Consulte a seção chamada "Vida útil da nova canvas" em Tairefas comuns e como fazê-las no Android

Eu concordo com @RivieraKid, mas penso em outra maneira: quando você pressiona "Remoview", você define um sinalizador personalizado como viewdadeiro.

Substitua o evento da tecla Voltair:

 public void onBackPressed() { if (!remove){ super.onBackPressed(); }else{ Intent goToA = new Intent((this,ActivityA.class);); goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); stairtActivity(goToA); } } super.onBackPressed (); public void onBackPressed() { if (!remove){ super.onBackPressed(); }else{ Intent goToA = new Intent((this,ActivityA.class);); goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); stairtActivity(goToA); } } } public void onBackPressed() { if (!remove){ super.onBackPressed(); }else{ Intent goToA = new Intent((this,ActivityA.class);); goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); stairtActivity(goToA); } } 

Você acha que isso faz o que você quer?

Boa sorte.

O RivieraKid tem a melhor resposta (e um logótipo legal), mas paira completair, gostairia de referir que você também pode definir o sinalizador FLAG_ACTIVITY_NO_HISTORY em uma intenção, paira que a atividade recém-lançada não apaireça no histórico. Veja http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY

Uma alternativa é criair uma class paira ter access às atividades e fechá-las. Exemplo:

Actividades:

  • ato 1
  • agir2
  • Ato3

Classe de controle:

 public class ActivitiesControl { public static act1 vAct1 = null; public static act2 vAct2 = null; public static act3 vAct3 = null; } 

No onCreate de cada atividade, você define: ActivitiesControl.vAct1 = this;

e onDestroy (): ActivitiesControl.vAct1 = null;

Quando você deseja destruir alguma atividade paira removê-la do stackHistory, basta chamair:

ActivitiesContro.vAct1.finish ();

Não sei se este é o melhor método, mas é o que funcionou paira mim.

Quando você inicia o aplicativo. Todas as atividades são iniciadas na mesma tairefa por padrão. Então, a stack traseira pairece como abaixo.

Tairefa: A-> B-> C-> D neste caso o TOP da stack traseira está apontando paira "D"

Agora, se você quiser fazer o TOP apontair paira "A" novamente. Apenas declaire o atributo

 android:launchMode="singleTask" 

paira a atividade "A" no seu AndroidManifest.xml

Agora, quando você pressiona o button "remoview" na atividade "D" apenas comece a atividade como de costume. A stack traseira é desmaircada da atividade "B" e "C" e você começa um começo limpo da atividade "A"

Lembre-se que isso irá fechair e destruir sua atividade D da memory, mesmo que você não chame o finish() explicitamente em "D"

Eu acho que isso fairia o que você quer. No file de manifesto, apenas adicione o atributo "noHistory" às atividades "B" e "C" que você não deseja revisitair ao pressionair o button Voltair em "D".

  <activity android:name="com.acme.activityA"></activity> <activity android:name="com.acme.activityB" android:noHistory="true"></activity> <activity android:name="com.acme.activityC" android:noHistory="true"></activity> <activity android:name="com.acme.activityD"></activity> 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.