Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的适配器.notifyDataSetChanged()不工作_Java_Android_Android Arrayadapter - Fatal编程技术网

Java 我的适配器.notifyDataSetChanged()不工作

Java 我的适配器.notifyDataSetChanged()不工作,java,android,android-arrayadapter,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); adapt

如何使用我的新阵列更新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);

我没有看到任何错误,我所有的Log.d都会恢复正常。但是,当我单击我的微调器时,显示的只是原始的
选择您的状态
我遗漏了一些基本的onCreate和Json加载内容,但是如果有人需要查看,请告诉我。

notifyDataSetChanged
不工作,因为您没有更改数据集,您正在创建一个新的副本,适配器不知道的一个。使用
列表
而不是数组,并修改传递给适配器的同一列表对象,它将正常工作。如果要保留当前代码,则必须在新数据集上创建新适配器,并将其应用于微调器。

不要创建新列表, 清除现有列表,然后调用notifydatasetchanged

someArrayList.clear();
someArrayList.add("element 1");
someArrayList.add("element 2");
yourAdapter.notifyDataSetChanged();
  • 首先创建一个列表
  • 每次使用新值重新加载列表之前,必须清除现有值a
  • 最后使用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();
    
    私人纺纱机纺纱试验;
    ArrayList_spinnerTest=新建ArrayList();
    列表_喷丝头测试。清除();
    String[]NameArray=新字符串[]{“从数组加载”、“bbbbbb”、“cccccc”、“dddddddd”、“eeeeeeee”};
    整数计数=5;
    for(int i=0;i

您正在将数据放入
array\u微调器中
而不是
spinner\u data
这是我的错他们都应该是array\u微调器我正在测试一些东西。在ref指南中,它说notifyDataSetChanged告诉适配器数据已更改并要刷新。如果我正在更改数组值,这不算是一个更改吗?@INFERENTONE:因为您没有更改数组值,所以您正在更改适配器甚至不知道的另一个数组中的值。我明白了。有没有一种方法可以在不使用列表的情况下处理我上面的代码?谢谢你提供的信息+1@Denoteone:如果您不想使用
列表
,则不能使用
notifyDataSetChanged
,因为您实际上正在增加数组的大小,而这是不受支持的。相反,您必须使用新创建的数组制作的新适配器再次调用
setAdapter
。再次感谢。我想我会用这个列表试着找出答案。
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();