2

ユーザーがコンテンツを表示するためにログインする必要があるアプリケーションがあります。ユーザーが戻るボタンを押すと、ログアウトするか、アプリケーションを続行するかを確認するプロンプトが表示されます。ただし、ユーザーがもう一度戻るボタンを押すと、アプリケーションがユーザーをログアウト画面に戻すようにしたいと思います。これどうやってするの?

@Override
public void onBackPressed() {
    exitPrompt();

}
private void exitUser(){
    UserFunctions userFunk = new UserFunctions();   
    userFunk.logoutUser(getApplicationContext());
    userFunk.resetCarcoord(getApplicationContext());
    Intent logout = new Intent(getApplicationContext(), MainActivity.class);
    logout.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(logout);
    finish();

}
private void exitPrompt(){
    new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle("Log out")
    .setMessage("Are you sure you want to log out?")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {   
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            exitUser();
        }
    })
    .setNegativeButton("No", null)
    .show();
}

}

4

4 に答える 4

2

exitPrompt()が呼び出されたときに、ブール変数mIsexitPromptShowingおよびAlertDialogインスタンスを使用してクラスを定義します。mIsexitPromptShowingインスタンスをtrueとして作成し、AlertDialogインスタンスを保存します。

onBackPressed()関数の場合:

public void onBackPressed() {

   if (!mIsexitPromptShowing) {
      exitPrompt();
   } else {
      AlertDialog.dismiss();
   }

}

サンプルコードを提供しました。安全なチェックを行ってください。これがお役に立てば幸いです。

于 2013-01-25T15:28:43.317 に答える
0

戻るボタンを最初にクリックして、タイマーを開始します。(たとえば、CountDownTimer)
次に、ユーザーが[戻る]ボタンをもう一度クリックした場合は、タイマーをキャンセルして、ログアウト画面にリダイレクトします。
そうでない場合は、タイマーが終了したときにダイアログを表示します。

于 2013-01-25T15:25:39.247 に答える
0

を使用できますAlertDialog.setOnCancelListener(...)。このメソッドは、ユーザーがダイアログをキャンセルしたときに呼び出されます。これは却下されるのとは異なることに注意してください。ダイアログは、構成変更の一部など、他の方法で却下される可能性があります。

private void exitPrompt(){
    new AlertDialog.Builder(this)
        /*...*/
        .setOnCanelListener(new DialogInterface.OnCancelListener()) {
            @Override
            public void onCancel(DialogInterface dialog) {
                exitUser();
            }
        })
        /*...*/
}

代わりにDialogFragmentを使用してダイアログを実行する場合は、代わりにonCancel()メソッドをオーバーライドできます。

于 2013-01-25T15:49:30.947 に答える
0

アクティビティまたはフラグメントでこのメソッドをオーバーライドします

    @Override
 public void onBackPressed() {
    if(condition) {
        //Write your code with this condition
    }
    else {  
        //To finish this activity  
    super.onBackPressed();
    }
  }
于 2014-10-15T08:24:57.177 に答える