更新listview,包含android中外部存储中文件夹的名称

时间:2014-06-07 04:57:39

标签: android listview android-listview android-external-storage

我有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;
}

2 个答案:

答案 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