我正在开发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));
}
}
如果在显示对话框时按主页键。当我再次启动应用程序时,单击“保存”按钮,会再次显示对话框。
我调试了我的代码并且它运行正常,但对话框仍处于打开状态。
发生了什么事?
感谢。
答案 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()上检查已保存的用户名?