Java 在显示片段之前执行AsyncTask

Java 在显示片段之前执行AsyncTask,java,android,android-fragments,android-asynctask,fragment,Java,Android,Android Fragments,Android Asynctask,Fragment,我正在实施抽屉布局和其中一个项目 或者抽屉的菜单显示一个带有图像的gridview,这也是一个片段 问题是,当我点击该项时,在网格之前存在延迟或延迟 将显示一组图像 我一直在搜索这个,我希望有一个AsyncTask,以确保GridView片段 应该在显示之前完全加载,我需要一个ProgressDialog来防止延迟 影响或掩盖视图。如何检查片段是否已准备好显示?怎么办 我处理异步任务?提前谢谢 ImageGridActivity fragment = new ImageG

我正在实施抽屉布局和其中一个项目 或者抽屉的菜单显示一个带有图像的gridview,这也是一个片段

问题是,当我点击该项时,在网格之前存在延迟或延迟 将显示一组图像

我一直在搜索这个,我希望有一个
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
方法。