如何在alertdialog被解雇时触发UI更新

时间:2012-06-20 23:43:32

标签: android alertdialog

我有一个由BroadcastReceiver启动的AlertDialog - 因此AlertDialog可能出现在我的任何活动的顶部,而不知道其实际上是哪个活动。

private void showAlert(Context context, String s) {
final AlertDialog alertDialog = new AlertDialog.Builder(context)
    .create();
alertDialog.setTitle(context.getString(R.string.SMS_Alert_title));
alertDialog.setMessage(s);
alertDialog.setButton(context.getString(R.string.alert_OK),
    new AlertDialog.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        return; //can't call the underlying activity's ui update method bec I don't know which activity is actually underlying
        }
    });
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}

当我现在按下AlertDialog上的“OK”按钮将其关闭时,基础活动中所有按钮的按下状态将变为未按下状态。我需要它们保持按下只是因为我的按钮在按下状态时显示不同的png - 我也用它来显示它们是按下时保持“ON”。 (在这种情况下,我无法使用切换按钮)

理想情况下,我只需更新基础活动的UI,但在AlertDialog被解除时不会调用onResume

当按下ALertDialog OK按钮时,我也无法调用任何UI更新方法,因为我不知道AlertDialog实际上是哪个活动(因为ALertDialog可能出现在任何活动的上面)

(我希望我能够很好地解释这个问题)

ps虽然我可以将未按下的按钮的背景更改为按下的png而不是仅仅说btn.setPressed(true)我想避免它。

非常感谢

2 个答案:

答案 0 :(得分:1)

在解除AlertDialog之后,您将需要“知道”正在显示哪个活动。您可以在Activity内部的AlertDialog上设置onDismissListener,然后进行相应的响应。为什么你希望你的按钮在没有被按下后保持按下状态超出我的范围,但是如果那是你真正想要的,那么只需将状态设置为按下,因为这基本上是你想要的:即使用户也是强制按下状态还没有按下它。

答案 1 :(得分:1)

我不太确定你想要实现的目标。但请继续关注。

有一个名为的界面...说'PressableActivity'?有一种方法。 'pressAllButtons'

在您想要解释的功能的所有活动上实现此功能,并实现在调用时按下所有按钮的方法。

在您的上下文中有一个'PressableActivity'类型的变量(甚至是静态类和静态变量都可以。)

将此变量分配给调用onResume时显示的活动。

当你创建对话框时,为它设置一个onDismissListener,它调用上下文中静态变量指向的对象上的'pressAllButtons'方法。

希望这有帮助。