Android:正确使用onBackPressed()和Toast的方式

Nic*_*ick 82 android

我写了一段代码,如果他们想要退出,会给用户提示他们再次按下.我目前我的代码工作到一定程度,但我知道它写得很差,我认为有更好的方法来做到这一点.任何的意见都将会有帮助!

码:

public void onBackPressed(){
    backpress = (backpress + 1);
    Toast.makeText(getApplicationContext(), " Press Back again to Exit ", Toast.LENGTH_SHORT).show();

    if (backpress>1) {
        this.finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ice 203

我会实现一个对话框询问用户是否要退出,然后调用super.onBackPressed()它们.

@Override
public void onBackPressed() {
    new AlertDialog.Builder(this)
        .setTitle("Really Exit?")
        .setMessage("Are you sure you want to exit?")
        .setNegativeButton(android.R.string.no, null)
        .setPositiveButton(android.R.string.yes, new OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                WelcomeActivity.super.onBackPressed();
            }
        }).create().show();
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您需要将WelcomeActivity替换为您的活动名称.

  • 我见过的每个应用都赞成"第二次背压"方法.如果出现对话框,用户不小心碰到后退键会很烦.吐司不那么具有侵入性. (6认同)
  • @Accollat​​ivo,听起来像你还是要调用`super.onBackPressed()`在`onBackPressed()`定义(比的onClick方法里面的一个除外)? (3认同)

A P*_*son 17

您不需要背压计数器.

只需存储对所显示的Toast的引用:

private Toast backtoast;

然后,

public void onBackPressed() {
    if(USER_IS_GOING_TO_EXIT) {
        if(backtoast!=null&&backtoast.getView().getWindowToken()!=null) {
            finish();
        } else {
            backtoast = Toast.makeText(this, "Press back to exit", Toast.LENGTH_SHORT);
            backtoast.show();
        }
    } else {
        //other stuff...
        super.onBackPressed();
    }
}
Run Code Online (Sandbox Code Playgroud)

finish()如果您在吐司仍然可见的情况下按回,并且仅在后退将导致退出应用程序时,这将调用.


Sol*_*lot 14

我用这个更简单的方法......

public class XYZ extends Activity {
    private long backPressedTime = 0;    // used by onBackPressed()


    @Override
    public void onBackPressed() {        // to prevent irritating accidental logouts
        long t = System.currentTimeMillis();
        if (t - backPressedTime > 2000) {    // 2 secs
            backPressedTime = t;
            Toast.makeText(this, "Press back again to logout",
                                Toast.LENGTH_SHORT).show();
        } else {    // this guy is serious
            // clean up
            super.onBackPressed();       // bye
        }
    }
}
Run Code Online (Sandbox Code Playgroud)