Java 在显示片段之前执行AsyncTask
我正在实施抽屉布局和其中一个项目 或者抽屉的菜单显示一个带有图像的gridview,这也是一个片段 问题是,当我点击该项时,在网格之前存在延迟或延迟 将显示一组图像 我一直在搜索这个,我希望有一个Java 在显示片段之前执行AsyncTask,java,android,android-fragments,android-asynctask,fragment,Java,Android,Android Fragments,Android Asynctask,Fragment,我正在实施抽屉布局和其中一个项目 或者抽屉的菜单显示一个带有图像的gridview,这也是一个片段 问题是,当我点击该项时,在网格之前存在延迟或延迟 将显示一组图像 我一直在搜索这个,我希望有一个AsyncTask,以确保GridView片段 应该在显示之前完全加载,我需要一个ProgressDialog来防止延迟 影响或掩盖视图。如何检查片段是否已准备好显示?怎么办 我处理异步任务?提前谢谢 ImageGridActivity fragment = new ImageG
AsyncTask
,以确保GridView片段
应该在显示之前完全加载,我需要一个ProgressDialog来防止延迟
影响或掩盖视图。如何检查片段是否已准备好显示?怎么办
我处理异步任务
?提前谢谢
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());`
我使用通用图像加载器来处理图像的下载和显示。
imageLoader.displayImage
您可以启动一个新的AsyncTask
,该任务在其doInBackground
方法(在后台线程上运行)中下载图像,并在其onPostExecute
方法(在UI线程上运行)中取消ProgressDialog
例如,在您的活动中:
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);
final Dialog progressDialog=progressDialog.show(此、标题、消息);
//应使用DialogFragment包装ProgressDialog
新建异步任务(){
@凌驾
受保护列表doInBackground(字符串…URL){
List imageList=新建ArrayList();
HttpURLConnection conn=null;
byte[]buffer=新字节[BUFF_SIZE];
ByteArrayOutputStream byteBuffer=新的ByteArrayOutputStream(缓冲大小);
//添加try-catch-finally块
for(字符串targetUrl:URL){
conn=(HttpURLConnection)新URL(targetUrl).openConnection();
InputStream iStream=新的BufferedInputStream(conn.getInputStream());
int len=0;
//或者可以使用ApacheCommonsIO
而((len=iStream.read(buffer))>=0){
写入(缓冲区,0,len);
}
add(byteBuffer.toByteArray());
byteBuffer.reset();
}
返回图像列表;
}
@凌驾
受保护的void onPostExecute(列表结果){
progressDialog.disclose();
setAdapter(新的ImageAdapter(结果));//示例
super.onPostExecute(结果);
}
}.执行(imageUrl1、imageUrl2、imageUrl3);
我正在使用ImageAdapter
将图像填充到列表视图中<代码>列表视图).setAdapter(新的ImageAdapter())代码>好的,我已经添加了。我假设您的ImageAdapter获取构造函数中的图像缓冲区列表。很抱歉,我忘了提到我正在使用Universal image Loader。我想您可以在加载所有图像后使用其API设置标志。检查SimpleImage LoadingListener
中的onLoadingComplete
方法。