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(...). 当用户取消对话框时调用此方法。请注意,这与被解除不同 - 可以以其他方式解除 Dialog,例如作为配置更改的一部分。

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 回答