我的申请表上有AlertDialog
的问题。我正在显示AlertDialog
,因此用户可以更改他刚刚按下的按钮的文本。当我第一次这样做时没有问题,但是如果我再次按下按钮,我的应用程序会崩溃并出现标题中的异常。这是我正在使用的代码:
public void createDialog(){
new AlertDialog.Builder(Settings.this)
.setTitle("Stampii Server Name")
.setView(input)
.setPositiveButton("Set Name", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String serverName = input.getText().toString();
server.setText(serverName);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).show();
}
server.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createDialog();
}
});
任何想法如何解决这个问题?我看过类似的问题,但找不到合适的解决方案。
提前致谢!
答案 0 :(得分:7)
.setView(input)
变量“input”未在方法中创建,并且每次都被添加到新对话框中。这意味着,每次调用create方法时,都会尝试将新父项添加到同一对象中。每次创建对话框时都需要一个新的“输入”,或者您可以一遍又一遍地使用相同的对话框。
答案 1 :(得分:1)
我有一次类似的问题。我正在使用showDialog(int id,Bundle args)并实现了
protected Dialog onCreateDialog(int id,Bundle args)
{
switch(id)
{
case ...:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositive...
return builder.create();
}
}
我的错误是我必须在创建新对话框之前使用removeDialog(int id),因为Android以某种方式缓存对话框,并且每次调用showDialog()时都不会调用onCreateDialog()。 所以我的解决方案是调用
removeDialog(id);
showDialog(id,args);
并通过在switch语句之前删除所有可能的对话框来修改onCreateDialog(),以避免与任何其他缓存对话框冲突。