按住主页键后再显示一个对话框并返回应用程序

时间:2011-02-03 16:45:57

标签: android modal-dialog android-2.2-froyo

我正在开发Android 2.2应用程序。

我使用对话框询问用户的昵称。这是我的源代码:

private void showDialog() {
    //set up dialog
    final Dialog dialog = new Dialog(UserStatsActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.createuserrow);
    dialog.setOnDismissListener(this);

    //set up button
    Button button = (Button) dialog.findViewById(R.id.saveUser);
    button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            TextView nameTextView = (TextView)dialog.findViewById(R.id.userName);
            userNickName = nameTextView.getText().toString().trim();

            if ((userNickName.length() > 0) &&
                (userNickName.length() < 9)){
                saveUser = true;
                dialog.dismiss();
            }
        }
    });
    //now that the dialog is set up, it's time to show it    
    dialog.show();
}

public void onDismiss(DialogInterface arg0) {
    try {
        if (saveUser) {
            SharedPreferences prefs = 
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            User.saveUser(getApplicationContext(), userNickName);
            Editor editor = prefs.edit();
            editor.putString(USER_NAME, userNickName);
            editor.putBoolean(FIRST_TIME_RUN, false);
            editor.commit();
            loadPreferences();
        }
    }
    catch (Exception ex){
        Log.e(Constants.APP_TAG, "UActivity: " + ex.getMessage());
        showAlert(this.getString(R.string.errorClose));
    }
}

如果在显示对话框时按主页键。当我再次启动应用程序时,单击“保存”按钮,会再次显示对话框。

我调试了我的代码并且它运行正常,但对话框仍处于打开状态。

发生了什么事?

感谢。

2 个答案:

答案 0 :(得分:3)

我会使用onCreateDialog()和onPrepareDialog()方法。通过这样做,您可以更好地控制填充和显示对话框的时间。

第一次显示对话框时,将激活

onCreateDialog()。此方法是设置对话框的方法。

onPrepareDialog()在每次显示之前触发。此方法可以在以后的每个时间更改选项。

@Override
    protected Dialog onCreateDialog(int id) {
    super.onCreateDialog(id);
    final Dialog dialog = new Dialog(UserStatsActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.createuserrow);
    dialog.setOnDismissListener(this);

    //set up button
    Button button = (Button) dialog.findViewById(R.id.saveUser);
    button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            TextView nameTextView = (TextView)dialog.findViewById(R.id.userName);
            userNickName = nameTextView.getText().toString().trim();

            if ((userNickName.length() > 0) && (userNickName.length() < 9)){
                saveUser = true;
                dialog.dismiss();
            }
        }
    });
//now that the dialog is set up, it's time to show it
return dialog;
}

这就是你的情况下可以使用onCreateDialog(int id)方法的方法。现在,请记住上面的内容,我没有考虑您可以创建的任何其他对话框,因此您应该为对话框分配一个常量Int并从此方法中确定。

另请注意,此方法会被称为第一个对话框。你必须使用:

@Override
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
    super.onPrepareDialog(id, dialog, args);
    if(id == DIALOG_DEFAULT) {
        dialog.setTitle(mSettings.getString(getString(R.string.key_due_date), getString(R.string.unknown_task)));
    ((AlertDialog)dialog).setMessage(mSettings.getString(getString(R.string.key_task), getString(R.string.unknown_task)));
    }
}

要为每个后续对话框重新填充,或将removeDialog(int DIALOG_ID);添加到onClick。

答案 1 :(得分:0)

您是否应该在showDialog()上检查已保存的用户名?