我的adapter.notifyDataSetChanged()不起作用

时间:2011-09-18 05:38:15

标签: java android android-arrayadapter

如何使用我的新阵列更新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加载的东西但是如果有人需要看到它只是让我知道。

3 个答案:

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