アクティビティAがBに続いてC、D、Fに進み、FIで終了したら、Bに再びジャンプしたいが、すべてのアクティビティC、D、およびFは歴史から削除する必要がありますが、BからAに戻ることは可能ですが、これを行う方法はありますか?ありがとう!!スタックからアクティビティの範囲を削除する
答えて
あなたは、活動F(または他のイベント)での戻るボタンを押すイベントをインターセプトし、提案xbadalは正しい考えであるとしてフラグを追加するバックアクティビティBへ
@override
public void onBackPressed(){
// Do what you need done here
Intent intent = new Intent(this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// if you need to pass data back to ActivityB
//intent.putExtra("tagName", yourData);
startActivity(intent);
this.finish();
}
を取得するためにintent
を使用することができますAndroidのドキュメントによれば、FLAG_ACTIVITY_CLEAR_TOP
を使用する必要があるようです。 Androidのドキュメントから
:
設定、およびアクティビティが起動され、既に他の活動のすべての上に、そして、 現在のタスクで実行中の代わりに、その 活動の新しいインスタンスを起動している場合それが閉鎖され、 このインテントは新しいインテントとして という古いアクティビティに配信されます。例えば
、活動からなるタスクを考慮する:A、B、C、D Dは活性Bの 成分に解決を意図してstartActivity()を呼び出す場合、C及びDは、完成したであろうA、Bの
https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
他のフラグがあなたに確認する必要がありintent
を呼び出す時に設定されているかに応じて:とBは今いるスタックで、その結果、与えられたテント を受け取りますどのフラグが既に含まれているかは、getFlags()
と矛盾するものをremoveFlags(int)
で削除します。
これを行う直接的な方法はありません。ちょうど代替、あなたは目的を調査するために次のコードを使用することができます。
navigateToBをF
のonBackPressedメソッドで使用してください。
注:すべての活動を開始します。アイデアを得るには、アクティビティコードBとFをご覧ください。すべてのアクティビティfinish
を除くおよび。
A.java
public class A {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
finish();
}
}
}
B.java
public class B {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", false);
setResult(RESULT_OK, i);
finish();
}
}
}
C.java
public class C {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
}
}
D.Javaの
public class D {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(data != null && data.getBooleanExtra("shouldClose", false)) {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
}
}
F.javaは
public class F {
public void navigateToB() {
Intent i = new Intent();
i.putExtra("shouldClose", true);
setResult(RESULT_OK, i);
finish();
}
@Override
public void onBackPressed() {
navigateToB();
}
}
これを試してみてください。これで以前のスタックがすべてクリアされ、新しいアクティビティが開始されます。
Intent intent= new Intent(F.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
ActivityCompat.finishAffinity(this)
- 1. Android:スタックからアクティビティを削除する
- 2. 範囲からグラフを削除する
- 3. エクセル式でマスター範囲から範囲を削除する方法
- 4. 行から文字の範囲を削除するシェルコマンド
- 5. MySQL |中間の日付範囲から行を削除する
- 6. C#の配列から範囲を削除する方法
- 7. リストから項目の範囲を削除する
- 8. TableViewから削除するとインデックスが範囲外ですか?
- 9. 選択範囲からハイライト表示を削除する
- 10. 設定範囲オブジェクトから行を削除する方法
- 11. 文字列から文字範囲を削除するJavascript
- 12. VBA範囲削除スクリプト
- 13. 与えられた範囲の間の行を削除する
- 14. nativescriptを使用してスタックからAndroidのアクティビティを削除する
- 15. 選択範囲のVBAから行を削除
- 16. Excelのセル範囲からブランクを動的に削除
- 17. ハイチャート:y軸からの値(範囲内)の非表示/削除
- 18. アクティビティからフラグメントを削除する
- 19. 名前付き範囲の削除
- 20. Excel VBA - 動的フィルタ範囲の削除
- 21. R:年齢範囲外の行をcsvテーブルから削除する
- 22. Android ContentValues weird範囲外削除
- 23. ある範囲を別の範囲にマッピングする際に異常値を削除しますか?
- 24. ユニコードの範囲をPython3のユニコードのテキストファイルから削除します。
- 25. プッシュされたスタックをタブバーから削除/解除する
- 26. C++のノードの範囲を削除する
- 27. llvmの命令の範囲を削除する
- 28. flowLayoutPanelのコントロールの範囲を削除する方法C#
- 29. 別の範囲の値から範囲を定義する
- 30. ループの範囲とランタイムエラーを排除する範囲
ロジックを理解しようとすると、すべてのアクティビティに対してシングルトンオブジェクトが作成されます。このアクティビティFでアクティビティFで使用されているオブジェクトを使用して、A-Fの間に完了したアクティビティを終了することができます。 – Vasant
なぜフラグメントを使用しないのですか? – xbadal