0

文字列(名前)とブール値(チェックされているかどうか)の配列を持つダイアログがあります

ダイアログ選択の外部でブール値を更新します.最初のクリックで更新されます.その後は同期されなくなります.

OnCreateDialog は一度だけ呼び出されます。(d.dissmis()) を呼び出してダイアログを閉じようとしましたが、同期できません。

誰かが助けることができるチャンスはありますか?

    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

ダイアログデータを更新する方法は?

配列のデータを更新していますが、メソッドに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 に答える