Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 Android-notifyDataSetChanged()不工作_Java_Android_Android Arrayadapter - Fatal编程技术网

Java Android-notifyDataSetChanged()不工作

Java Android-notifyDataSetChanged()不工作,java,android,android-arrayadapter,Java,Android,Android Arrayadapter,我已经创建了一个自定义的ArrayAdapter,用于显示问题列表。我查询数据库,转换数据,将数据传递给数组,然后将数组传递给ArrayAdapter以显示我的列表 dbData = getDbData(); List<Question> questions = getQuestions(1L); dbData.closeDb(); setContentView(R.layout.activity_questions); adapter = new QuestionsAdapter(

我已经创建了一个自定义的ArrayAdapter,用于显示问题列表。我查询数据库,转换数据,将数据传递给数组,然后将数组传递给ArrayAdapter以显示我的列表

dbData = getDbData();
List<Question> questions = getQuestions(1L);
dbData.closeDb();
setContentView(R.layout.activity_questions);
adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, dbData);
我必须查询数据库,进行转换,创建我的数组,然后为我的更改创建一个新的适配器以显示在主列表中。为什么我不能这样做:

@Override
protected void onResume() {
    super.onResume();
    dbData = getDbData();
    questions = getQuestions(1L);
    adapter.notifyDataSetChanges();
}

我需要做些什么才能让它工作?谢谢您的帮助。

适配器保留所有元素的副本,因此当您调用notifyDataSetChanged时,它会检查自己的元素副本

请尝试以下操作:

@Override
protected void onResume() {
    super.onResume();
    dbData = getDbData();
    questions = getQuestions(1L);

    adapter.clear();
    adapter.addAll(questions);  // API level [1..10] use for(..){ adapter.add(question.get(index)) }  or simply implement addAll method in you custom adapter for your own convenience (thanks to @Mena)
    adapter.notifyDataSetChanged();
}

+这是我的荣幸。旁注:如果希望与API级别10兼容(如果内存可用),则不能使用
addAll
方法。您应该循环使用
add
@Override
protected void onResume() {
    super.onResume();
    dbData = getDbData();
    questions = getQuestions(1L);

    adapter.clear();
    adapter.addAll(questions);  // API level [1..10] use for(..){ adapter.add(question.get(index)) }  or simply implement addAll method in you custom adapter for your own convenience (thanks to @Mena)
    adapter.notifyDataSetChanged();
}