Как изменить элементы, перечисленные в AlertDialog? - PullRequest
1 голос
/ 15 сентября 2011

В моём приложении пользователь может добавлять новые города.Это должно выглядеть следующим образом:

  1. Нажмите кнопку «Добавить город» из меню.
  2. Выбирает провинцию из списка (AlertDialog), который появляется.
  3. Выбирает город из списка, который создается на основе выбранной провинции.

Диалог провинции всегда будет таким же, поэтому я сделал диалог города отдельным диалогом.Проблема в том, что поскольку onCreateDialog () вызывается только при первом добавлении города, я не могу понять, как настроить этот список на основе выбранной провинции.addItems () - это метод AlertDialog.builder, который, насколько я могу судить, не очень полезен для меня в onPrepareDialog.

Как каждый раз изменять список элементов в диалоговом окнеПозвонил (и обновил onClickListener соответственно?

Редактировать: я добавил код, который у меня есть. У меня есть две основные проблемы с текущей реализацией:

  1. Диалог города(SelectLocationDialog) выглядит совершенно иначе, чем диалог провинции. Я не могу понять, как сделать так, чтобы они выглядели одинаково (сейчас я использую android.R.layout.simple_list_item_1 для диалога городов).
  2. Для диалога городов нет onClickListener, поэтому он ничего не делает.

    @Override
    protected Dialog onCreateDialog(int id, Bundle args) {
        AlertDialog.Builder builder = null;
    
        switch (id) {
    
            case DIALOG_SELECT_PROVINCE:
                return SelectProvinceDialog.create(this);
    
            case DIALOG_SELECT_LOCATION:
                return SelectLocationDialog.create(this);
    
            default:
                return null;
        }
    }
    
    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
    
        switch (id) {
    
            case DIALOG_SELECT_LOCATION:
                // looks up all cities/sites in the province selected in the
                // previous dialog
                siteList = new XmlSiteListReader(this);
                siteList.findSitesByProvince(Province.valueOf(
                        Province.getAbbreviatedName(selectedProvince)));
                String[] sites = siteList.siteNames();
    
                ListView siteListView = new ListView(this);
                ArrayAdapter<CharSequence> siteListAdapter = 
                        new ArrayAdapter<CharSequence>(this, 
                        android.R.layout.simple_list_item_1, sites);
                siteListView.setAdapter(siteListAdapter);
                dialog.setContentView(siteListView);
        }
    }
    
    
    
    /**
     * A dialog that allows the user to select a province/region from which to add
     * locations to watch.
     * 
     * @author Dean Morin
     */
    public class SelectProvinceDialog {
    
        private static final String[] PROVINCES;
        static {
            PROVINCES = new String[Province.values().length];
            Province[] provinces = Province.values();
            for (int i = 0; i < provinces.length; i++) {
                PROVINCES[i] = provinces[i].getFullName();
            }
        }
    
        /**
         * Creates the 'Select Province' dialog window.
         * 
         * @param context The context for this dialog.
         * @return The constructed dialog.
         */
        public static AlertDialog create(final Context context) {
            AlertDialog.Builder selectProv = new AlertDialog.Builder(context);
            selectProv.setTitle("Select Province");
            selectProv.setItems(PROVINCES, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    ((WeatherWatch) context).setSelectedProvince(PROVINCES[item]);
                    ((Activity) context)
                            .showDialog(WeatherWatch.DIALOG_SELECT_LOCATION, null);
                }
            });
            return selectProv.create();
        }
    }
    
    
    public class SelectLocationDialog {
    
        /**
         * Creates the 'Select Location' dialog window.
         * 
         * @param context The context for this dialog.
         * @return The constructed dialog.
         */
        public static AlertDialog create(final Context context) {
            AlertDialog.Builder selectLoc = new AlertDialog.Builder(context);
            return selectLoc.create();
        }    
    }
    

1 Ответ

0 голосов
/ 15 сентября 2011

onPrepareDialog - это место, где вы сможете изменить значения списка.Я делал нечто подобное раньше.Разместите свой код, если вам нужна помощь, чтобы написать его.

...