2

Activity A -> Activity B -> Activity C -> Activity D. アクティビティ D で [戻る] を押すと、アプリケーションからユーザーをナビゲートする必要がありますが、アクティビティ C、B、および A では [戻る] が正常に機能する必要がありますC -> back -> B -> back A -> back -> exit

Activity.FLAG_ACITIVITY_CLEAR_TOP,色々な組み合わせでフラグを設定してみました。何も機能していないようです。最小 API レベル 7。

4

4 に答える 4

2

為に#1 Pressing back in Activity D should navigate user out of the application

ActivityD では、onBackPressed または onKeyDown メソッドをオーバーライドしてから、フラグ FLAG_ACTIVITY_CLEAR_TOP と Exit フラグを使用して ActivityA を開始できます (putExtra メソッド経由)。ActivityA では、Exit フラグの値を取得し、Exit フラグが true に設定されている場合は finish() を呼び出すことができます。

アクティビティ A の onCreate メソッドでは、次のことを行う必要があります。

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}

ActivityD の onBackPressed または onKeyPressed メソッドで、

intent = (this, ActivityA.class);   
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   intent.putExtra("EXIT", true);
   startActivity(intent); 

為に#2 Exit from ActivityA

onBackPressed または onKeyPressed で finish() メソッドを呼び出すだけです。

于 2012-09-19T10:09:38.580 に答える
0

アクティビティ D の [戻る] ボタンの機能をオーバーライドしようとしましたか? これはあなたが必要としているものに非常に関連していると確信しています:戻るボタンをオーバーライドしてホームボタンのように振る舞う

Android アクティビティのライフサイクルも理解してください。

于 2012-09-19T10:12:43.697 に答える
0

Android アクティビティは、アクティビティ スタックに格納されます。以前の活動に戻ることには、2 つの意味があります。

  1. startActivityForResult を使用して別のアクティビティから新しいアクティビティを開きました。その場合、コードから finishActivity() 関数を呼び出すだけで、前のアクティビティに戻ることができます。

  2. アクティビティ スタックを追跡します。インテントを使用して新しいアクティビティを開始するときはいつでも、FLAG_ACTIVITY_REORDER_TO_FRONT や FLAG_ACTIVITY_PREVIOUS_IS_TOP などのインテント フラグを指定できます。これを使用して、アプリケーション内のアクティビティ間をシャッフルできます。しかし、それらをあまり使用していません。ここでフラグを見てください

于 2012-09-19T10:11:29.600 に答える
0
  1. 「アクティビティ D で戻ると、ユーザーはアプリケーションの外に移動するはずです」

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                moveTaskToBack(true);           
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
  2. これは OS の通常の動作であり、特別なことを行う必要はありません。

于 2012-09-19T11:00:45.147 に答える