【问题标题】:Dismiss dialog of custom preference关闭自定义首选项对话框
【发布时间】: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


【解决方案1】:

好的,我找到了一个灵魂。我有一个静态布尔值,它显示是否有一个打开的对话框。

private static boolean isAnyDialogOpen = false;

在对话框绑定时,我将其设置为 true, 关闭对话框后,我将其设置为 false。 结果发现即使这样也有问题,但解决方案更容易

@Override
protected void onClick() {
    if (isAnyDialogOpen)
        Log.i(lTag, "there is a dialog already");
    else {
        isAnyDialogOpen = true;
        super.onClick();
    }
}
@Override
public void onDismiss(DialogInterface dialog) {
    Log.d(lTag, "dismiss, dialog= "+dialog);

    isAnyDialogOpen = false;
    if (dialog != null) super.onDismiss(dialog);
}

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2011-09-18
    相关资源
    最近更新 更多