Android 按home键并返回应用程序后显示两次对话框
我正在开发一个安卓2.2应用程序 我使用一个对话框询问用户的昵称。这是我的源代码: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
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)));
}
}