【发布时间】:2014-01-14 19:54:51
【问题描述】:
我有一个自定义首选项 TimePreference,它扩展了 DialogPreference。它有一个自定义对话框资源,看起来像这样
来源是
@Override
protected void onBindDialogView(View v){
super.onBindDialogView(v);
v.findViewById(R.id.butCancel).setOnClickListener(onClickL);
v.findViewById(R.id.butNow).setOnClickListener(onClickL);
v.findViewById(R.id.butOK).setOnClickListener(onClickL);
//....
}
//...
private final View.OnClickListener onClickL = new View.OnClickListener(){
@Override
public void onClick(View v) {
Log.d(lTag, v + " clicked");
switch (v.getId()) {
case R.id.butOK: saveToSP(false);break;
case R.id.butNow: saveToSP(true);
}
try {
getDialog().dismiss(); //may throw null pointer
} catch (Exception e) { Log.w(lTag, "Exc @onClickL", e); }
}
};
//...
我发现了一个错误,如果您非常快地两次(在首选项屏幕上)单击相同的首选项,则会打开两个对话框。您可以关闭第一个,但是当您尝试关闭第二个时,应用程序会崩溃。这是一个 NullPointerException,所以我将它包含在一个 try-catch 块中。现在,异常被捕获,但按钮不会关闭对话框。请注意,通过单击 返回,它确实关闭。
如何关闭第二个对话框(可能通过模拟后退按钮的行为?)?注意,我希望 API 级别低于 10。
【问题讨论】:
-
出现此对话框的原因是您自定义的还是内置的?
-
为什么不禁用按钮单击时,关闭对话框时重新启用它?
-
@Saqib 内置,我是在.xml文件中设置的
-
@BadaroJr。我试过了,但是当点击第二个对话框时,它们被禁用并且对话框没有关闭(与以前相同的异常)
标签: android android-preferences android-dialog