Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按home键并返回应用程序后显示两次对话框_Android_Modal Dialog_Android 2.2 Froyo - Fatal编程技术网

Android 按home键并返回应用程序后显示两次对话框

Android 按home键并返回应用程序后显示两次对话框,android,modal-dialog,android-2.2-froyo,Android,Modal Dialog,Android 2.2 Froyo,我正在开发一个安卓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.creat

我正在开发一个安卓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));
    }
}
private void showDialog(){
//设置对话框
最终对话框=新建对话框(UserStatsActivity.this);
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
setContentView(R.layout.createuserrow);
setOnDismissListener(这个);
//设置按钮
Button Button=(Button)dialog.findViewById(R.id.saveUser);
setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
TextView name TextView=(TextView)dialog.findViewById(R.id.userName);
userNickName=nameTextView.getText().toString().trim();
if((userNickName.length()>0)&&
(userNickName.length()<9)){
saveUser=true;
dialog.dismise();
}
}
});
//现在对话框已经设置好,是时候显示它了
dialog.show();
}
public void onDismiss(对话框接口arg0){
试一试{
如果(保存用户){
SharedReferences优先权=
GetDefaultSharedReferences(getApplicationContext());
saveUser(getApplicationContext(),User昵称);
编辑器编辑器=prefs.edit();
putString(用户名、用户昵称);
putBoolean(第一次运行,false);
commit();
loadPreferences();
}
}
捕获(例外情况除外){
Log.e(Constants.APP_标记,“UActivity:+ex.getMessage());
showAlert(this.getString(R.string.errorClose));
}
}
如果在显示对话框时按home键。当我再次启动应用程序,并单击“保存”按钮时,对话框再次显示

我已经调试了我的代码,它工作得很好,但是对话框仍然打开

发生了什么事


谢谢。

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

我将使用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;
}

为每个后续对话框重新填充,或添加
removeDialog(int dialog\u ID)
到您的onClick。

如果我检查用户是否保存在showDialog方法中,则对话框仍在打开。检查onPrepareDialog()期间设置的用户名。如果设置了用户名,则可以调用finish()停止显示活动。或者在showDialog()中的dialog.show()行周围使用if语句。
@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)));
    }
}