我想顯示ListView中的圖像的縮略圖。這些圖像位於我的SD卡上的相機文件夾中。我正在使用BitmapFactory.decodeFile來讀取圖像。我想在文件解碼時顯示ProgressDialog。我想先顯示ProgressDialog,然後在for循環中調用decodeFile。 ProgressDialog直到for循環之後才顯示。在顯示ProgressDialog之前,對decodeFile的調用似乎正在運行。Android的BitmapFactory decodeFile被調用之前,它應該是
如何在我的for循環之前顯示ProgressDialog?
公共類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;
}
}
}
我爲了覈實後的for循環正在顯示的ProgressDialog註釋掉調用progressDialog.dismiss() 。我已經刪除了代碼行來顯示ListView中的圖像以便於閱讀。我證實我仍然在我的日誌for循環。
感謝
感謝,該教程是非常有益的。我沒有意識到Android中的主線程是UI線程!我希望進度對話框會首先顯示,並在位圖文件解碼時保持顯示。我在一本名爲Pro Android的書中找到了一個很好的例子。我會在下面發表我的最終答案。 –