0

我有一个由 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 上的“确定”按钮将其关闭时,我在基础活动中的所有按钮的按下状态都变为未按下状态。我需要它们保持按下状态只是因为我的按钮在按下状态下显示不同的 png - 我也用它来显示它们在按下时保持“打开”状态。(在这种情况下我不能使用切换按钮)

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

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

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

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

非常感谢

4

2 回答 2

1

我不太确定你想要达到什么目的。但是请尝试跟随。

有一个名为...的接口说“PressableActivity”?它有一种方法。'按下所有按钮'

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

在你的上下文中有一个“PressableActivity”类型的变量(或者甚至一个静态类和一个静态变量都可以。)

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

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

希望这可以帮助。

于 2012-06-21T05:03:19.323 回答
1

您需要以一种或另一种方式“知道”在解除 AlertDialog 后正在显示哪个活动。您可以在 Activity 内的 AlertDialog 上设置 onDismissListener,然后做出相应的响应。为什么您希望您的按钮在未按下后保持按下状态,这超出了我的理解,但如果这是您真正想要的,那么只需将状态设置为按下,因为这本质上就是您想要的:即使用户处于强制按下状态没有再次按下它。

于 2012-06-21T02:00:46.653 回答