5

5つの異なる画面で複数のアクティビティがあります。最初の画面と他の画面で戻るキーが押された場合の状況をどのように処理する必要がありますか?finish()およびSystem.exit()が機能していません..戻るボタンが押された場合、アプリケーションを終了するにはどうすればよいですか?以下のコーディングは機能しませんか?複数の画面を持つアプリケーションを終了する方法を教えてください

 public boolean onKeyDown(int keyCode, KeyEvent event) 
 {
    if (keyCode == KeyEvent.KEYCODE_BACK) 
     {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                this);

        new AlertDialog.Builder(this) .setMessage("Are you sure you want to exit?")
           .setCancelable(true)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
           { 
             public void onClick(DialogInterface hi, int dd) 
             {

                Intent exitIntent = new Intent(Mapper.this,SplashActivity.class);
                exitIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
                SplashActivity.mHandler.sendEmptyMessage(0);                   
                startActivity(exitIntent);    


             }
           }
          )
         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
         { 
           public void onClick(DialogInterface hi, int dd) 
           {

           }
         }
         );
        AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
      //AlertDialog alert1 = alt_bld.create();
      //alert1.setTitle("EXIT");
      //alert1.show(); 
       return true; 
     }
     return super.onKeyDown(keyCode, event);
 }

  And in Start.Class:
  public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) 
    {
        mHandler.removeCallbacksAndMessages(null);
        SplashActivity.this.finish();
    }

    return super.onKeyDown(keyCode, event); 
}
4

5 に答える 5

6

このようにオーバーライドするだけonBackPressed()です...

@Override
public void onBackPressed()
{
    finish();  
}
于 2012-11-14T21:45:52.247 に答える
0

まず、こうして欲しいと言おうとしているのですか?

Activity1 --> Activity2 --> Activity3 --> Activity4 --> Activity5

現在のアクティビティは Activity5 です。バックプレス。アプリケーション全体を終了しますか? 現在のアクティビティで、バック プレスでアプリケーションを終了しますか? Activity3 のように、バックを押して終了しますか? はいの場合、呼び出し元のアクティビティで startActivity() を呼び出すたびに、finish() を呼び出すことができます。または、呼び出すすべてのアクティビティで結果変数を使用することもできます。たとえば、staryActivityWithResult() を介して呼び出し、ソース Activity - Acitivity1 からの onActivityResult() メソッド内でその結果を待機することにより、Activity1 から Activity2 を呼び出すことができます。したがって、Activity2 で背中が押された場合は、終了する前に、Activity2 の setResult() メソッドに変数を渡してください。この結果は、呼び出し元の Activity1 に渡されます。渡した結果に応じて、必要なことを行うことができます。

于 2012-11-15T00:36:22.457 に答える
0

戻るボタンを押して終了したいのはなぜですか?これはアンドロイドのような動作ではありません。ユーザーは通常、押し戻すことで前のアクティビティに戻りたいと考えていますが、アプリを終了したくはありません。Android は、必要に応じて自身でアクティビティの破棄を処理します。

于 2012-11-14T21:56:28.630 に答える
0

あなたが間違いなく探しているのは onBackPressed です:

@Override
public void onBackPressed() {
    //do your intent here
}

コンテキストから何がわからない:

SplashActivity.mHandler.sendEmptyMessage(0); 

この行はそうしますが、それ以外は元の意図をスプラッシュ スクリーンに戻す必要があります。バックプレスで本当にアプリを終了したい場合は、そこにいくつかのデータを入れます。

exitIntent.putExtra("toExit", true);

基本的には、スプラッシュ アクティビティが読み取り、それ自体で finish() を呼び出すことを決定できる単なるフラグです。アプリを手動で閉じる唯一の「良い」方法は、最初のアクティビティを終了することです (実際には、ユーザーにアプリを終了させることはほとんどありません)。

編集:OKなので、アプリで(SplashActivityのように見えます)戻ると、次のようにonCreateでインテントを探します:

Intent i = getIntent();
Bundle extras = i.getExtras();

Boolean toExit = extras.getString("toExit");
if(toExit){
    finish();
}
于 2012-11-14T21:49:13.213 に答える
0

任意のアクティビティでアプリケーションを終了します。次の手順を実行します:

1-アプリケーションを終了したい場所から、アクティビティでインテントを作成します。

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

2- 最初のアクティビティで、これを onCreate() メソッドに次のように記述します。

if (getIntent().getData()!= null) {

if (getIntent().getBooleanExtra("EXIT", false)) 
{
    finish();
}
}
于 2019-09-22T10:52:12.267 に答える