0

我有一个对话框,它有一个字符串数组(名称)和布尔值(选中与否)

在对话框选择之外我更新布尔值,第一次单击它们会更新,之后它们不再同步

OnCreateDialog 只被调用一次。我尝试通过调用 (d.dissmiss()) 来关闭对话框,但我无法让它同步。

有人可以提供帮助吗?

    protected String[] _Geooptions;
protected boolean[] _Geoselections;

Dialog d;

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case 0:
        d = new AlertDialog.Builder(this)
        .setTitle("Set Geo Filters")
        .setMultiChoiceItems(mapGeoManager._Geooptions,
                mapGeoManager._Geoselections,
                new GeoDialogSelectionClickHandler())
        .setPositiveButton("OK", new GeoDialogButtonClickHandler())
        .create();
        return d;}


public class GeoDialogSelectionClickHandler implements
        DialogInterface.OnMultiChoiceClickListener {
    public void onClick(DialogInterface dialog, int clicked,
            boolean selected) {
        Log.i("ME", mapGeoManager._Geooptions[clicked] + " selected: "
                + selected);
        mapGeoManager.FilterUpdate();

    }
}


public class GeoDialogButtonClickHandler implements
        DialogInterface.OnClickListener {
    public void onClick(DialogInterface dialog, int clicked) {
        switch (clicked) {
        case DialogInterface.BUTTON_POSITIVE:
            Log.d(TAG, "ON CLICK BUTTON POSITIVE!");
            mapGeoManager.FilterUpdate();

            break;
        }
    }
}
4

2 回答 2

1

如何刷新对话框数据?

您正在更新数组的数据,但您没有将其告知for方法ListView使用的内部。当您更新布尔数组时,获取对's的引用,获取其适配器并调用它:AlertDialogsetMultiChoiceItems()AlertDialogListViewnotifyDataSetChanged

// after updating the array
((BaseAdapter) ((AlertDialog) d).getListView().getAdapter()).notifyDataSetChanged();
于 2013-01-18T07:52:21.140 回答
1

这个答案源于 Luksprog 对获得对话框列表视图的评论

我将 Dialog d 变量更改为 AlertDialog 并在我的 clearALL 或 SelectAll 按钮调用中手动遍历列表并更新选项 - 这不是最有效的方法,但它似乎是唯一可行的方法(他的 notifyonchange 没有为我做任何事——我很困惑为什么它不会……)

ListView curList = d.getListView();
for(int i = 0; i < mapGeoManager._Geoselections.length; ++i)
    curList.setItemChecked(i, mapGeoManager._Geoselections[i]);
于 2013-01-18T18:05:14.500 回答