2013-08-31 84 views
0

我正在實現一個DrawerLayout,並且其中一個項目 或者抽屜的菜單顯示的圖像也是一個片段。在顯示片段之前執行AsyncTask

問題是,當我點擊該項目時,在顯示圖像的網格 之前存在此延遲或滯後。

一直在尋找這一點,我想有一個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());` 

我使用通用-圖片下載器來處理圖像的下載和顯示它。 imageLoader.displayImage

回答

0

你可以推出一個新AsyncTask是下載在其doInBackground方法圖像(它運行在後臺線程),並在其onPostExecute方法駁回ProgressDialog(運行在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); 
+0

我使用的是'ImageAdapter'來填充圖像到ListView。 'listView).setAdapter(new ImageAdapter());' – rahstame

+0

好的,我補充說。我假設你的ImageAdapter在構造函數中獲取圖像緩衝區列表。 – rbarriuso

+0

抱歉,我忘記提及我正在使用Universal Image Loader。 – rahstame

相關問題