使用Xamarin的.Android,我如何重置AlertDialog中选中的项目

本文关键字:AlertDialog 项目 何重置 Xamarin Android 使用 | 更新日期: 2023-09-27 18:13:19

我有一个AlertDialog显示在一个按钮上,允许用户从多个选项中进行选择。当AlertDialog随后重新启动时,选择将被记住。

我正在使用SetMultiChoiceItems方法,并传入一个代表我想要的选择的bool数组,但这似乎被忽略了(注意,我在对话框解除时重置了所选数组)。

private AlertDialog OpenSelectMultiplePlayers(List<SelectionViewModel> selections, SelectReason reason)
{
    string[] items = (from p in selections
                      select p.PlayerName).ToArray();
    bool[] selected = new bool[selections.Count];
    var builder = new AlertDialog.Builder(this);
    builder.SetTitle(Resource.String.select_players);
    builder.SetMultiChoiceItems(items, selected, (s, e) => {
        selected[e.Which] = e.IsChecked;
    });
    builder.SetPositiveButton(Resource.String.alert_dialog_ok, (s, e) =>
    {
        // TODO: Do something with the selection
        for (int i = 0; i < selected.Length; i++) { selected[i] = false; }
    });
    builder.SetNegativeButton(Resource.String.alert_dialog_cancel, (s, e) =>
    {
        for (int i = 0; i < selected.Length; i++) { selected[i] = false; }
    });
    return builder.Create();
}

显然使用Xamarin,一些代码对android开发人员来说看起来很奇怪,但我在翻译中遗漏了什么吗?

编辑:

新信息:似乎后续的ShowDialog调用不会导致任何额外的OnCreateDialog执行。OnCreateDialog是执行OpenSelectMultiplePlayers的方法。这意味着我甚至没有机会重新构建AlertDialog, android/Xamarin正在内部缓存这个

使用Xamarin的.Android,我如何重置AlertDialog中选中的项目

OnCreateDialog在第一次需要构造对话框时被调用,正如您所观察到的,它被缓存。

你需要处理OnPrepareDialog中的元素刷新。

另一个选项是显式地删除对话框,以便每次使用RemoveDialog完成后重新创建对话框。