3

私は5つのアクティビティがあるアプリケーションを持っています。1 つのメニュー アクティビティと、メニュー画面に接続された別の 4 つの子アクティビティ。したがって、任意のアクティビティを選択してから、メニューに戻ることができます。このように動き回るとします。

メニュー -> アクティビティ 1 -> メニュー -> アクティビティ 3 -> アクティビティ 2 -> メニュー

そして今、ホーム/戻るボタンを押すと、アプリが終了確認の警告ダイアログを表示するようにしたいです。はいを押すと、すべてのアクティビティを強制終了し、ホーム画面を表示します。

私はそれらの finish() 、 System.exit(0) を試しましたが、そこには運がありません。finish() と System.exit(0) は両方とも現在のアクティビティをすべてではなく終了します。道を教えてください。

4

4 に答える 4

0

はい、できます。2つの異なるアプローチがあります

  1. onActivityResult を使用する

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (resultCode == QUIT_ALL) {
            // 
            setResult(QUIT_ALL,returnIntent);     
           finish();
         }
     }    
    //last activity
    setResult(QUIT_ALL,returnIntent);     
    finish();
    
  2. アクティビティがスタックをスキップすることを明示的に宣言します。

    < activity android:name=".Activity1" android:noHistory="true" ... />
    < activity android:name=".Activity2" android:noHistory="true" ... />
    
于 2013-05-23T09:15:13.293 に答える
0

これは私のために働いた:

    Intent intent = new Intent(this, TopMenuActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra(Utils.INTENT_EXIT, true);
    startActivity(intent);
    finish(); // finish the current activity

そして、TopMenuActivity onCreate() メソッドに以下を追加します

    if( getIntent().getBooleanExtra(Utils.INTENT_EXIT, false)){
        finish(); // finish TopMenu and go HOME
        return; // prevent from doing unnecessary stuff below
    }

汚い、はい!しかし、それは機能します。

于 2013-05-23T09:10:03.213 に答える
0

ホームボタンがクリックされたら、アクティビティを終了します。このコードをアクティビティに入れます。その作業は私にとって完璧です..

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_HOME)) {
    Log.v("hari", "KEYCODE_HOME");
    onUserLeaveHint();

    return true;
}
if ((keyCode == KeyEvent.KEYCODE_BACK)) {

    return true;
}
if ((keyCode == KeyEvent.KEYCODE_MENU)) {

    return true;
}
return false;
}


public void onUserLeaveHint() { // this only executes when Home is selected.

super.onUserLeaveHint();
if (!isFinishing()) {
    Log.v("hari", "if condition working");
    finish();
}

}

しかし、このコードを使用すると戻るボタンが機能しないことがあります...

于 2013-07-11T12:37:59.227 に答える
0

バックグラウンドでは子供の活動を停止する方がよいと思います。例えば

Menu > Activity1 > 

menu再び に行く場合は、 を終了しAcitivy 1ます。

またMenu > Activity 3 > Activity 2 > Menu

アクティビティ 3 に移動してからアクティビティ 2 に移動すると、結果の開始アクティビティを使用して 3 からアクティビティ 2 を開始します。SO アクティビティ 2 からメニューに移動したい場合は、アクティビティ 3. に進むことができます。

これを使用するための別のより良い解決策はCLEAR_TOPSINGLE_TASKSメニューを開くフラグです。したがって、メニューに移動すると、メニュー アクティビティのみがアクティブになります。その後、finish を呼び出すことで、アプリケーションを終了できます。

于 2013-05-23T09:04:37.753 に答える