从SD卡读取文件时如何显示进度条

时间:2017-11-08 03:47:21

标签: java android

我正在从SD卡读取文件列表。但我的应用程序冻结,而它循环存储。所以我想在显示所有文件之前显示一个进度条。

public ArrayList<MyFile> getPlayList() {
    File home = Environment.getExternalStorageDirectory();
    File[] listFiles = home.listFiles();
    if (listFiles != null && listFiles.length > 0) {
        for (File file : listFiles) {
            if (file.isDirectory()) {
                scanDirectory(file);
            } else {
                addFileToList(file);
            }
        }
    }

    return songsList;
}



@OnClick(R.id.btn_browser)
public void onClickBrowser() {
    // want to show progress bar here when user click a button
    if (fileList == null)
        fileList = fileManager.getPlayList();

    ListDialog listDialog = new ListDialog(this, fileList,
            this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    listDialog.show();
}

1 个答案:

答案 0 :(得分:1)

您需要异步调用getPlayList()。有各种方法可以使用它,我建议AsyncTask因为提取文件应该采用&lt; 3秒。如果还有更多,那么你需要考虑其他一些背景解决方案。

在AsyncTask中,

  1. onPreExecute()

  2. 期间显示进度指示器
  3. getPlayList()

  4. 中执行doInBackground()
  5. 最后关闭进度指示器并在ListDialog中显示onPostExecute()

  6. 话虽如此,如果获取播放列表是一次性的事情,并且您确信用户仍然会点击R.id.btn_browser,那么您可以预取播放列表。这只是一个设计建议。