jha*_*amm 4 java android android-arrayadapter
我创建了一个显示问题列表的自定义ArrayAdapter.我查询数据库,转换该数据,将数据传递给数组,然后将数组传递给ArrayAdapter以显示我的列表.
dbData = getDbData();
List<Question> questions = getQuestions(1L);
dbData.closeDb();
setContentView(R.layout.activity_questions);
adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, dbData);
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,您可以单击各种问题,操作一些东西并返回主列表.底层数组尚未更改,因为更改已在db中保留.我再次查询数据库,运行我的转换,然后我的数组是最新的.我在我的onResume()方法中执行此操作,但适配器将无法识别该notifyDataSetChanged()方法的任何更改.我onResume()看起来像这样:
@Override
protected void onResume() {
super.onResume();
dbData = getDbData();
questions = getQuestions(1L);
adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, dbData);
items.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
我必须查询数据库,进行转换,创建我的数组,然后为我的更改创建一个新的适配器以显示在主列表中.为什么我不能这样做:
@Override
protected void onResume() {
super.onResume();
dbData = getDbData();
questions = getQuestions(1L);
adapter.notifyDataSetChanges();
}
Run Code Online (Sandbox Code Playgroud)
我需要做些什么来完成这项工作?谢谢您的帮助.
Bor*_*lov 15
适配器保留所有元素的副本,因此当您调用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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7460 次 |
| 最近记录: |