我正在尝试在 ListView 中显示图像的缩略图。这些图像位于我的 SDCard 上的 Camera 文件夹中。我正在使用 BitmapFactory.decodeFile 读取图像。我想在解码文件时显示 ProgressDialog。我试图先显示 ProgressDialog,然后在 for 循环中调用decodeFile。 ProgressDialog 直到 for 循环之后才会显示。对decodeFile 的调用似乎在显示ProgressDialog 之前正在运行。
如何在 for 循环之前显示 ProgressDialog?
公共(public)类 ActivityProgressBar 扩展 ListActivity {
private Vector<RowFileData> fileDataDisplay = null;
RowFileData fileData;
ProgressDialog progressDialog = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading thumbnails...");
fileDataDisplay = new Vector<RowFileData>();
File currentDirectory = new File("/mnt/sdcard/dcim/camera");
File[] currentDirectoryFileList = currentDirectory.listFiles();
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 16;
progressDialog.show();
for(int i=0; i<currentDirectoryFileList.length; i++)
{
File currentDirectoryFile = currentDirectoryFileList[i];
fileData = new RowFileData(BitmapFactory.decodeFile(currentDirectoryFile.getPath(), opts), currentDirectoryFile.getPath());
fileDataDisplay.add(fileData);
Log.v("myLog", "inside for loop");
}
}
private class RowFileData
{
protected Bitmap rowBitmap;
protected String rowFileName;
RowFileData(Bitmap bitmapPreview, String fileName)
{
rowBitmap = bitmapPreview;
rowFileName = fileName;
}
}
}
我注释掉了对 ProgressDialog.dismiss() 的调用,以验证 ProgressDialog 是否在 for 循环后显示。我删除了在 ListView 中显示图像的代码行,以便于阅读。我确认我的日志仍在 for 循环中。
谢谢
最佳答案
您还可以使用 asynctask 在后台解码位图并在前面显示进度对话框。完成解码位图后,只需禁用进度对话框。 Android - AsyncTask和 Tutorial帮你。谢谢。
关于java - Android BitmapFactory解码文件在它应该被调用之前被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208925/