我一直在尝试动态地在android中更新我的微调器,但我尝试的任何东西都没有工作。
这是我用来更新微调器的以下代码。
typeList = dbAdapter.getList(); //array list with the values
adapter.notifyDataSetChanged();
groupSpinner.postInvalidate();
groupSpinner.setAdapter(adapter);
typeList的值是正确的,但它们没有在Spinner中更新。
答案 0 :(得分:22)
实际上,您必须在适配器上调用clear / add,或者创建并设置新适配器。适配器不保留对列表的引用(它只在构造时调用列表中的Array),因此无法自行更新。
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, newStringList);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerCategory.setAdapter(dataAdapter);
答案 1 :(得分:12)
您只需要调用一次setAdapter(),然后调用adapter.notifyDataSetChanged()来更新数据。
答案 2 :(得分:12)
您不能简单地修改原始List
,然后像其他适配器一样调用notifyDataSetChanged()
,因为它不会保留原始List
。但是,使用适配器本身可以获得相同的结果,如下所示:
spinnerAdapter.clear();
spinnerAdapter.addAll(updatedListData);
spinnerAdapter.notifyDataSetChanged(); // optional, as the dataset change should trigger this by default
根据user392117的回答(https://stackoverflow.com/a/38738734/1508887)
答案 3 :(得分:8)
如果列表中的数据已更改,并且您想要更新 旋转器然后
创建适配器的新对象并将该适配器设置为 微调。它确实有效。
祝你好运。
编辑:您还需要在适配器上调用notifyDataSetChanged()。
答案 4 :(得分:4)
是否有拼写错误? dbAdapter
和adapter
之间的区别是什么?如果Spinner已经有适配器,则不必重新分配它。更重要的是,您唯一需要做的就是更新适配器并调用notifyDataSetChanged
方法。
typeList = adapter.getList(); //array list with the values
// change the values, and then
adapter.notifyDataSetChanged();
答案 5 :(得分:1)
更改基础数据并在适配器上调用notifyDataSetChanged()。
list.clear();
list.add("A");
list.add("B");
dataAdapter.notifyDataSetChanged();
答案 6 :(得分:1)
更改数据后,您需要添加以下代码:
typeList = dbAdapter.getList()
adapter = new ArrayAdapter<String>(v.getContext(),
android.R.layout.simple_spinner_dropdown_item,typeList);
groupSpinner.setAdapter(adapter);
答案 7 :(得分:0)
显然在执行typeList = dbAdapter.getList()
之后,变量typeList
指向不同的列表,而不是最初馈送到适配器的列表,并且适配器会有些混乱。
所以你应该使用以下代码:
typeList.clear();
typeList.addAll(dbAdapter.getList());
答案 8 :(得分:0)
设置微调器适配器时添加
spinnerAdapter.setNotifyOnChange(true);
从那时起,当您添加新数据时,它将自动更新。
答案 9 :(得分:0)
在适配器上使用add / remove并使用notifyDataSetChanged()使您不必反复创建新适配器。
声明适配器全局
ArrayAdapter<Object> adapter;
当您向适配器附加到的对象列表添加内容时(字符串或您使用的任何对象)向适配器添加添加功能并调用notifyDataSetChanged:
adaper.add(Object);
adapter.notifyDataSetChanged();
当您从列表中删除项目时,还添加:
adapter.remove(Object);
adapter.notifyDataSetChanged();