2

以下のコードを使用して、ダイアログをポップするためFragmentにファイナルをチェックしますActivity

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if there is only one fragment
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
                DlgUniversalError.shallIQuit(this, getApplicationContext()
                        .getResources().getString(R.string.doYouWantToQuit),
                        getSupportFragmentManager());
                return false;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

ここで、s のセットがあるとしますActivityActivityがスタックの最後であるかどうかについて同じことを実行しActivity、終了ダイアログをポップするにはどうすればよいですか?

4

1 に答える 1

7

アクティビティ 1、2、3 ... があり、そのフローは次のとおりです。

Activity 1 -> Activity 2 -> Activity 3 -> ... and so on

あなたが実際に持っている唯一の選択肢は、あなたので、次のようにメソッドをActivity 1オーバーライドすることです:onBackPressed()

@Override
public void onBackPressed(){

    /* Call the Quit Dialog here. If user presses YES,
     * call super.onBackPressed(), else if user presses NO,
     * do nothing. */

}

Fragmentバックスタックはアプリケーションに対してローカルですが、バックActivityスタックはタスクに対してローカルです。現在のタスクのActivityバックスタックのステータスを確認するには、いくつかの方法があります。

1.あなたのActivity流れは

A1 -> A2 -> A3 -> A1 -> A2 -> A3 -> A1 ...

Activity 1常に空のバックスタックで開始するようにすることができます。Activity 1で開始するたびに、次のフラグstartActivity()を付けて呼び出します。FLAG_ACTIVITY_CLEAR_TOP

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

2. isTaskRoot()と呼ばれるメソッドがあり、 anActivityがそのタスクの最初Activity(つまり、そのタスクのバックスタックの最後)かどうかを知ることができますActivity。これは有望に見えます。

3.Activity anがバックスタックの最後のものかどうかを判断する方法がもう 1 つあります。

    ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

    if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
        /* do whatever you want e.g. super.onBackPressed() etc. */
    }

このためandroid.permission.GET_TASKSに、マニフェストにアクセス許可を追加します。

そこで... :)

于 2015-02-15T15:16:05.177 に答える