我正在实施DrawerLayout和其中一项 或者抽屉的菜单显示带有图像的网格视图,图像也是片段。
问题是当我点击该项目时,在网格之前有这种延迟或滞后 将显示图像。
一直在寻找这个,我希望有一个AsyncTask
来确保GridView片段
应该在显示之前完全加载我需要有一个ProgressDialog以防止滞后
影响或掩盖视图。如何检查片段是否准备好显示?怎么做
我处理AsyncTask
?提前谢谢。
ImageGridActivity fragment = new ImageGridActivity();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.replace(R.id.fragment_planet_replace, fragment);
Bundle args = new Bundle();
args.putStringArray(Extra.IMAGES, Constants.IMAGES);
fragment.setArguments(args);
ft.addToBackStack(null);
ft.commit();
修改
I am using an `ImageAdapter` to populate the images to the listview.
`listView.setAdapter(new ImageAdapter());`
我使用Universal-Image-Loader处理图像下载和显示。
imageLoader.displayImage
答案 0 :(得分:0)
您可以启动新的AsyncTask
,以doInBackground
方式(在后台线程上运行)下载图像,并在其ProgressDialog
方法中解除onPostExecute
(它运行在UI线程上。)
例如,在您的活动中:
final Dialog progressDialog = ProgressDialog.show(this, title, message);
//Should use DialogFragment to wrap the ProgressDialog
new AsyncTask<String, Void, List<byte[]>>(){
@Override
protected List<byte[]> doInBackground(String... urls) {
List<byte[]> imageList = new ArrayList<byte[]>();
HttpURLConnection conn = null;
byte[] buffer = new byte[BUFF_SIZE];
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(BUFF_SIZE);
//Add try - catch - finally block
for(String targetUrl : urls){
conn = (HttpURLConnection)new URL(targetUrl).openConnection();
InputStream iStream = new BufferedInputStream(conn.getInputStream());
int len = 0;
//Alternatively could use Apache Commons IO
while ((len = iStream.read(buffer)) >= 0) {
byteBuffer.write(buffer, 0, len);
}
imageList.add(byteBuffer.toByteArray());
byteBuffer.reset();
}
return imageList;
}
@Override
protected void onPostExecute(List<byte[]> result) {
progressDialog.dismiss();
listView.setAdapter(new ImageAdapter(result)); //Example
super.onPostExecute(result);
}
}.execute(imageUrl1, imageUrl2, imageUrl3);