如何使用我的新阵列更新ArrayAdapter?
Belwo是我的ArrayAdapter,添加了默认数组。
String[] array_spinner = new String[]{"Select your state."};
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item,array_spinner);
adapter.setDropDownViewResource(R.layout.state_spinner_layout);
Myspinner.setAdapter(adapter);
现在我加载一些JSON数据,将信息解析为array_spinner_data
,我想调用notifyDataSetChanged()
array_spinner = new String[]jsonArray.length();
for (int i=0; i<jsonArray.length(); i++)
{
String styleValue = jsonArray.getJSONArray(i).getString(0);
Log.d(TAG, styleValue);
array_spinner[i] = styleValue;
}
Log.d(TAG, String.valueOf(array_spinner.length));
adapter.notifyDataSetChanged();
我没有看到任何错误,并且我的所有Log.d都按照他们的意愿回来了。但是,当我点击我的微调器时,所有显示的都是原始的Select your state
我遗漏了一些基本的onCreate和Json加载的东西但是如果有人需要看到它只是让我知道。
答案 0 :(得分:11)
notifyDataSetChanged
“无效”,因为您没有更改数据集,而是创建了一个新的副本,即适配器不知道的副本。使用List<>
而不是数组,并修改传递给适配器的那个相同的列表对象,它将起作用。如果要保留当前代码,则必须在新数据集上创建新适配器并将其应用于微调器。
答案 1 :(得分:0)
不要创建新列表, 清除现有列表然后调用notifydatasetchanged
someArrayList.clear();
someArrayList.add("element 1");
someArrayList.add("element 2");
yourAdapter.notifyDataSetChanged();
答案 2 :(得分:0)
最后使用您的DataAdapter.notifyDatachanged()。功能
private Spinner spinnerTest;
ArrayList<String> list_spinnerTest = new ArrayList<String>();
list_spinnerTest.clear();
String[] NameArray=new String []{"Load From Array","bbbbbbbb","cccccccccc","ddddddddd","eeeeeeeeee"};
int count=5;
for (int i = 0; i < count; i++) {
list_spinnerTest.add(NameArray[i]);
}
ArrayAdapter<String> dataAdapterSpinner=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list_spinnerTest);
dataAdapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerTest.setAdapter(dataAdapterSpinner);
dataAdapterSpinner.notifyDataSetChanged();