我有一个可以从另一台设备下载文件的应用程序。
这些文件显示在Listview
中,我使用自定义适配器为列表的每个项目显示CheckBox
和TextView
。
DownloadActivity
启动时,我检查存储目录并显示Listview
中当前存在的所有文件。一切正常。
我可以删除文件,它们消失了。
但是,当我下载新文件时,也会尝试更新ArrayList
和适配器。但是,这不起作用。
我正在调用notifyDataSetChenged()
,但没有运气。
我认为应该刷新视图并添加文件。我没有错。只是列表中未显示的文件。
如果我关闭应用程序并重新启动,则在启动DownloadActivity
时将显示文件。
到目前为止,这是我的代码:
public void saveFile(String curSurvey, String curFilename) {
if (externalDir == null) {
Toast.makeText(getApplicationContext(),
"Sorry! Failed to save survey. No Directories", Toast.LENGTH_SHORT)
.show();
} else if (curSurvey.length() > 0 && curFilename.length() > 0) {
FileReadWriteWrapper frww = new FileReadWriteWrapper();
frww.openOutputWriter(curFilename, externalDir, "/surveys");
frww.writeToFile(curSurvey);
frww.closeIOStream();
if (arrayList == null) {
arrayList = new ArrayList<>();
}
arrayList.add(new FileListItem(false,curFilename + " " + curSurvey.length() + " Bytes" )); ;
if (surveyFileListAdapter == null) {
surveyFileListAdapter = new SurveyFileListAdapter(arrayList,this);
surveyListview.setAdapter(surveyFileListAdapter);
}
surveyFileListAdapter.notifyDataSetChanged();
}
}
答案 0 :(得分:0)
我看到的主要问题是您没有更新适配器内的列表。这样,您的适配器始终具有相同的要显示的数据集...
// Here is your problem.. You are updating the List in the Activity/Fragment
// However, you must update the list inside the adapter.
// Otherwise, the adapter will always display the same items.
arrayList.add(new FileListItem(false,curFilename + " " + curSurvey.length() + " Bytes" )); ;
if (surveyFileListAdapter == null) {
surveyFileListAdapter = new SurveyFileListAdapter(arrayList,this);
surveyListview.setAdapter(surveyFileListAdapter);
} else {
// Add this else statement..
// This way, if the adapter was already created, you just update its list
// and call notifyDataSetChanged to refresh the screen
surveyFileListAdapter.updateList(arrayList);
surveyFileListAdapter.notifyDataSetChanged();
}
然后,您的适配器:
public void updateList(ArrayList<FileListItem> arrayList) {
mArrayList = arrayList;
}
注意:您可以创建一个方法并仅添加新项(而不是替换整个列表),而不是在适配器中更新整个列表。无论如何,我只是想指出有问题的地方给你!
希望我能帮忙