我有ListView
显示外部存储的所有文件夹的名称。我想在我的应用程序创建或删除新文件夹时自动刷新或更新ListView
。但是,在我再次打开该布局文件之前,它永远不会自动更新。我正在使用Get Files()方法获取文件,然后在ListView
中查看它们。我现在该怎么办?
任何帮助表示感谢提前
我正在使用此代码显示所有文件夹
try {
ListView lv;
File path=Environment.getExternalStorageDirectory();
ArrayList<String> FilesInFolder = GetFiles(path);
lv = (ListView)findViewById(R.id.filelist);
final ArrayAdapter<String> array=new ArrayAdapter<String> (this,
android.R.layout.simple_list_item_1, FilesInFolder);
lv.setAdapter(array);
}
这里是获取文件mathod
public ArrayList<String> GetFiles(String DirectoryPath) {
ArrayList<String> MyFiles = new ArrayList<String>();
File f = new File(DirectoryPath);
f.mkdirs();
File[] files = f.listFiles();
for (int i=0; i<files.length; i++)
MyFiles.add(files[i].getName());
return MyFiles;
}
答案 0 :(得分:0)
假设你已经有了这段代码:
ListView lv;
File path=Environment.getExternalStorageDirectory();
ArrayList<String> FilesInFolder = GetFiles(path);
lv = (ListView)findViewById(R.id.filelist);
final ArrayAdapter<String> array=new ArrayAdapter<String> (this,
android.R.layout.simple_list_item_1, FilesInFolder);
lv.setAdapter(array);
现在您使用filesInFolder
数组获得了arrayAdapter。
要刷新视图,只需将项添加到适配器指向的数组,然后使用以下调用:
array.notifyDatasetChanged();
它会让适配器知道它的数据现在用更多的数据更新,并且它会重绘列表的内容。
您也可以更改一下您的代码以进行更新:
public void updateList() {
File f = new File(DirectoryPath);
f.mkdirs();
File[] files = f.listFiles();
for (int i=0; i<files.length; i++)
if (!FilesInFolder.contains(files[i].getName())
FilesInFolder.add(files[i].getName());
array.notifyDatasetChanged();
}
答案 1 :(得分:0)
我认为您可能希望通过使用监视文件夹作为其数据源的Loader来遵循更规范的方法。 您也可以将CursorLoader与CursorAdapter结合使用,但这取决于您。 您可以找到文档here。