0

DrawerLayout を実装しており、ドロワーの項目またはメニューの 1 つに、フラグメントでもある画像を含むグリッドビューが表示されます。

問題は、アイテムをクリックするまでに、画像のグリッドが表示されるまでにこの遅延またはラグがあることです。

これを探していて、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

4

1 に答える 1

0

そのメソッド (バックグラウンド スレッドで実行される) でAsyncTask画像をダウンロードする new を起動し、そのメソッド (UI スレッドで実行される) で を閉じることができます。doInBackgroundProgressDialogonPostExecute

たとえば、アクティビティでは次のようになります。

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);
于 2013-08-31T02:55:27.763 に答える