Как обновить счетчик динамически?
Я пытаюсь обновить свой счетчик в андроиде динамически, но ничего не пытаюсь работать.
Это следующий код, который я использую для обновления счетчика.
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();