0

我有一个ListView显示所有外部存储文件夹的名称。我想在ListView我的应用程序创建或删除新文件夹时自动刷新或更新。但在我再次打开该布局文件之前,它永远不会自动更新。我正在使用Get Files() 方法获取文件,然后在ListView.com 中查看它们。我现在该怎么办?提前感谢任何帮助我正在使用此代码显示所有文件夹

  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);
   }

这是获取文件的方法

   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;
}
4

2 回答 2

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();
}
于 2014-06-07T05:51:59.333 回答
0

我认为您可能希望通过使用将文件夹监视为其数据源的加载程序来遵循更规范的方法。您也可以将 CursorLoader 与 CursorAdapter 结合使用,但这取决于您。您可以在此处找到文档。

于 2014-06-07T05:58:42.563 回答