我在按下按钮时显示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,Andoird / Xamarin正在内部缓存它。
答案 0 :(得分:2)
OnCreateDialog 在第一次需要构建对话框时调用,正如您所观察到的那样,它被缓存。
您需要处理 OnPrepareDialog 中元素的刷新。
另一个选项是显式删除对话框,以便每次使用 RemoveDialog 重新创建对话框。