1

ユーザーがAndroidの戻るボタンをクリックしたときにアプリケーション全体を終了したい.現在、以前に開いたアクティビティに戻ります。私も onBackPressed() をオーバーライドしようとしましたが、うまくいきません。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
    }
       return super.onKeyDown(keyCode, event);
}
enter code here
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    return;
}
4

5 に答える 5

4

これを試して、ルートとして機能するアクティビティからアプリケーションを開始します。

public class Root extends Activity {

     public void onCreate() {
         super.onCreate();
         handleIntent();
      }

      public void onNewIntent(Intent intent) {
        setIntent(intent);
        handleIntent();
      }

     private void handleIntent() {
         boolean end = getIntent.getBooleanExtra("End");
         if (end) {
            finish();
         } else {
            Intent intent = new Intent(this, MyRealFirstActivity.class); // where this is the class that you want the user to see when they launch your app.
            startActivity(intent);
         }
      }



      public void onResume() {
        super.onResume();
        finish();
      }
}

次に、戻るボタンでアプリを終了するアクティビティ内で、次の操作を行います。

public class LastActivity extends Activity {

    public void onBackPressed() {
        Intent intent = new Intent(this, Root.class);
        intent.putExtra("End", true);
        intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }
}

このようにして、アプリを起動してから [戻る] ボタンを押すまでの間に開始されたすべてのアクティビティがすべて finished() されます。これは基本的に、アプリのスレートを最初から最後までクリーンアップしてから終了します。

于 2012-10-13T06:33:52.533 に答える
2

この場合、アクティビティを終了する必要があるため、finish() メソッドを使用して現在のアクティビティを閉じます。ただし、intent(別のアクティビティを開始) を呼び出す以前のすべてのアクティビティにも、finish() を記述する必要があります。それが明確になることを願っています。

于 2012-10-13T06:33:03.203 に答える
1

ここでは、戻るボタンを押したときにアプリに2つの方法があります。finish or kill

  1. finish()これを使用すると、Android画面の現在のアクティビティが閉じたり終了したりします。

    例: ABの2つのアクティビティがあります。インテントを使用してAアクティビティからBアクティビティに移動します。これで、前景のアクティビティはBになります。戻って、Bアクティビティを強制終了し、戻るボタンをクリックしてAfinish()アクティビティに移動します。アクティビティを実行している場合は、アプリを閉じます。以下のコードを参照してください。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    finish();
    }
    return super.onKeyDown(keyCode, event);
    }
    
  2. これを使用android.os.Process.killProcess(android.os.Process.myPid());すると、アプリが強制終了されます。つまり、アプリを強制的に閉じてホーム画面に移動します。以下のコードを参照してください。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
    // Kills & force closes the app 
    android.os.Process.killProcess(android.os.Process.myPid());
    }
    return super.onKeyDown(keyCode, event);
    }
    
于 2012-10-13T07:58:54.300 に答える
1
 public void onBackPressed() {

         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_HOME);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         this.finish();
         startActivity(intent);
       }
于 2012-10-13T06:44:12.647 に答える
1

私のアプリで行った方法は次のとおりです。ActivityA が最初に開始されます。次に、ActivityB を開始します。ActivityB でエラーが発生する可能性があり、その場合は activityA に戻りたいか、すべてが正しく終了する可能性があり、その場合はアプリを完全に「終了」したいと考えています。

アクティビティ A:

public class ActivityA extends Activity {
...
    private final static int REQUEST_ACT_B = 1;
...
    private void startChild() {
        startActivityForResult(new Intent(this, ActivityB.class), REQUEST_ACT_B;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_TASK && resultCode == ActivityB.RESULT_OK) {
            this.finish();
        }
    }
}

そしてActivityBで:

public class ActivityB extends Activity {
...
    public final static int RESULT_OK = 1;
    public final static int RESULT_ERROR = 2;
...
    private void finishWithError() {
        setResult(RESULT_ERROR);
        finish();
    }

    private void finishSuccessfully() {
        setResult(RESULT_OK);
    }
}

基本的に、ActivityA は ActivityB を開始し、結果が返されることを期待します。「OK」という結果が返された場合、アプリケーションは終了し、ユーザーは賢明ではありません: アプリは終了しました。結果「エラー」を受け取った場合、ActivityA は開いたままになります。

于 2013-01-15T17:11:04.483 に答える