Spinner, как изменить данные - PullRequest
0 голосов
/ 16 апреля 2020

У меня изначально есть 2 блесны в моем проекте. Я хочу изменить данные 2-го счетчика при изменении значений первого счетчика. Вот что я попробовал.

Spinner subscription = findViewById(R.id.spinner_subscription);
    items_subscription = new String[]{"Daily"};
    ArrayAdapter<String> adapter_subscriptions = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items_subscription);
    subscription.setAdapter(adapter_subscriptions);

    payment_method.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(position == 0){
                items_subscription = new String[]{"Daily"};
            }else if(position == 1){
                items_subscription = new String[]{"Monthly", "Annually"};
            }else if(position == 2){
                items_subscription = new String[]{"Monthly", "Annually"};
            }else{
                items_subscription = new String[]{"Daily"};
            }

            adapter_subscriptions.notifyDataSetChanged();
            subscription.setAdapter(adapter_subscriptions);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

И выше не работает. Он только показывает «Ежедневно» под нагрузкой, и когда значения Spinner1 изменяются, значения spinner2 не изменяются. Как мне добиться следующего?

1 Ответ

1 голос
/ 16 апреля 2020

Это происходит потому, что вы изменили ссылку на массив items_subscription вашего адаптера, когда вы переназначили его внутри onItemSelected, теперь ваш adapter_subscriptions не имеет того же объекта, что и массив, и вы изменяете Данные о том, что адаптер не знает об этом. Лучше иметь список массивов, очистить его и заполнить новыми данными, когда они будут изменены, затем вызвать adapter.notifyDataSetChanged().

ArrayList<String> items_subscription = new ArrayList<>();
// add your objects to the list and initialize the adapter
// ...
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    items_subscription.clear();
    if(position == 0){
        items_subscription.add("Daily");
    }
    // ...etc

    adapter_subscriptions.notifyDataSetChanged();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...