如何动态更新微调器?

时间:2010-07-19 17:20:20

标签: android android-spinner

我一直在尝试动态地在android中更新我的微调器,但我尝试的任何东西都没有工作。

这是我用来更新微调器的以下代码。

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

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

typeList的值是正确的,但它们没有在Spinner中更新。

10 个答案:

答案 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)

是否有拼写错误? dbAdapteradapter之间的区别是什么?如果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();