0

На форме расположено два элемента Spinner

private Spinner spinCompany;
private Spinner spinMaterial;
private List<String> listCompany;
private List<String> listMaterial;
private ArrayAdapter<String> adapterCompany;
private ArrayAdapter<String> adapterMaterial;

инициализация адаптеров

private void initAdapterCompany() {
    if (listCompany != null && !listCompany.isEmpty()) {
        adapterCompany = new ArrayAdapter<>(
                this,
                android.R.layout.simple_list_item_1,
                listCompany);
        spinPowerCompany.setAdapter(adapterCompany);
    }
}

Второй адаптер инициализируется аналогично При открытии формы заполняются два списка listCompany и listMaterial На первый список повесил обработчик

spinPowerCompany.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
                                int position, long id) {

При смене элемента в spinCompany обновляю список listMaterial (проверял, список действительно изменяется) далее вызываю

adapterMaterial.notifyDataSetChanged();

Но в spinMaterial по прежднему остаются старые значения Что не так?

alex
  • 349
  • 1
    Список нужно не только обновить, но и передать в адаптер, а уже потом обновлять и его. Внутри адаптера находится старый список. Где то я читал, как решается эта проблема правильно, однако решения не запомнил и сам использую простой костыль, как здесь https://ru.stackoverflow.com/a/553996/177345. Можете делать так же или найти, как эту проблему решают в гугле. Еще хотелось бы предостеречь от такой ошибки сразу https://ru.stackoverflow.com/q/1100495/177345 – pavlofff Jul 13 '21 at 23:51
  • Так я же его передаю в самом начале, зачем его по новой передавать. Переменная списка остается та же самая, я просто обновляю список и потом обновляю адаптер. Разве не так? – alex Jul 14 '21 at 07:00
  • Вы написали "по прежднему остаются старые значения" - затем и передавать заново, что вам нужны новые значения, а не старые. Есть общеизвестный факт, что при обновлении ArrayList в активити, методом notifyDataSetChanged() список в адаптере не будет обновлен, я предложил вам простое решение этой проблемы. Впрочем вы можете продолжать задаваться риторическими вопросами и стоять на месте или попробовать, что получится по моему совету. На английском стаке есть тема по этому вопросу, можете поискать и почитать ее, попробовать другие решения, я выбрал самое простое – pavlofff Jul 14 '21 at 09:07

0 Answers0