Как обновить счетчик динамически?

Я пытаюсь обновить свой счетчик в андроиде динамически, но ничего не пытаюсь работать.

Это следующий код, который я использую для обновления счетчика.

typeList = dbAdapter.getList(); //array list with the values

adapter.notifyDataSetChanged();
groupSpinner.postInvalidate();
groupSpinner.setAdapter(adapter);

Значения typeList верны, но они не обновляются в Spinner.

Ответы

Ответ 1

На самом деле, вам либо нужно вызывать clear/add на адаптере, либо создать и установить новый адаптер. Адаптер не сохраняет ссылку на ваш список (он только вызывает toArray в вашем списке при построении), поэтому нет возможности обновить его.

dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, newStringList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerCategory.setAdapter(dataAdapter);

Ответ 2

Вам нужно только один раз вызвать setAdapter(), и вы вызываете adapter.notifyDataSetChanged() для обновления данных.

Ответ 3

Когда вы изменили данные в своем списке и когда хотите обновить заклинатель затем

Создайте новый объект адаптера и установите этот адаптер на вертушка. Он будет работать уверенно.

Желаем удачи.

Изменить: Также вам нужно вызвать notifyDataSetChanged() на адаптере.

Ответ 4

Есть ли опечатка или что-то еще? В чем разница между dbAdapter и adapter. Если у Spinner уже есть адаптер, вам не нужно повторно назначать его. Более того, единственное, что вам нужно сделать - это обновить адаптер и вызвать метод notifyDataSetChanged.

typeList = adapter.getList(); //array list with the values
// change the values, and then
adapter.notifyDataSetChanged();

Ответ 5

Измените базовые данные и вызовите адаптер notifyDataSetChanged().

   list.clear();
  list.add("A");
      list.add("B");
  dataAdapter.notifyDataSetChanged();

Ответ 6

После изменения данных вам нужно будет добавить следующий код:

typeList = dbAdapter.getList()              
adapter = new ArrayAdapter<String>(v.getContext(),
    android.R.layout.simple_spinner_dropdown_item,typeList);            
groupSpinner.setAdapter(adapter);

Ответ 7

Вы не можете просто изменить оригинальный List, а затем вызвать notifyDataSetChanged(), как на других адаптерах, так как он не удержит исходный List. Однако вы можете добиться того же результата с помощью самого адаптера, например:

spinnerAdapter.clear();
spinnerAdapter.addAll(updatedListData);
spinnerAdapter.notifyDataSetChanged(); // optional, as the dataset change should trigger this by default

На основе ответа от user392117 (fooobar.com/questions/393043/...)

Ответ 8

По-видимому, после typeList = dbAdapter.getList() переменная typeList указывает на другой список, а не тот, который вы первоначально подали на адаптер, и адаптер несколько запутался.

Итак, вы должны использовать следующий код:

typeList.clear();
typeList.addAll(dbAdapter.getList());

Ответ 9

При настройке адаптера счетчика добавьте

spinnerAdapter.setNotifyOnChange(true);

С этого момента, когда вы добавите новые данные, он будет автоматически обновлен.

Ответ 10

Использование добавления/удаления на вашем адаптере и использование notifyDataSetChanged() позволяет вам не создавать новые адаптеры снова и снова.

Объявите глобальный адаптер

ArrayAdapter<Object> adapter;

Когда вы добавляете что-то в список объектов, к которому подключен адаптер (строки или любой другой объект, который вы используете), добавьте функцию добавления в адаптер и вызовите notifyDataSetChanged:

adaper.add(Object);
adapter.notifyDataSetChanged();

и когда вы удалите элемент из списка, добавьте также:

adapter.remove(Object);
adapter.notifyDataSetChanged();