2013-07-29 2 views
0

부드럽게 스크롤하려면 여기 Android Smooth Scrolling의 지침을 따르지만 onPostExecute의 setImageBitmap 메서드는 여전히 내 listview를 고정시킵니다. 여기 여기setImageBitmap onPostExecute on myListview

private static class ThumbnailTask extends AsyncTask<Integer, Void, Bitmap> { 
    private final WeakReference<ImageView> imageViewReference; 

    public ThumbnailTask(ImageView imageView) { 

     imageViewReference = new WeakReference<ImageView>(imageView); 
    } 

    @Override 
    protected Bitmap doInBackground(Integer... params) { 

     Bitmap image = fragment.getAlbum().getPhotos().get(params[0]).getImage(Utils.THUMBNAIL_SCREEN_SIZE); 
     return ThumbnailUtils.extractThumbnail(image, 40, 40); 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     if (isCancelled()) { 
      bitmap = null; 
     } 

     if (imageViewReference != null) { 
      ImageView imageView = imageViewReference.get(); 
      if (imageView != null) { 
       imageView.setImageBitmap(bitmap); 
      } 
     } 
    } 




} 

그리고 비동기 작업에 대한 내 코드는 내가 doInBackground 방법에서의 getView 방법

new ThumbnailTask(holder.image).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, position); 

긴 프로세스가 "된 GetImage"입니다 그것을 사용하고 어떻게, 내가 ' onPostExecute의 ImageView에 이미지를 놓기 만하면됩니다. setImageBitmap에 주석을 달면 스크롤이 부드럽게 돌아갑니다. 내가 뭘 잘못하고있어?

+0

는 UI 스레드에서 일을해야하지 않나요? – Rajeev

답변

0

비동기 작업에서 get()이 필요하다고 생각합니다.

imageView.setImageBitmap(bitmap); 

만이 문제가 아니다 : 나는 당신이이 줄을 주석으로 때 GET의 부정적인 효과를 볼 수 있다고 생각합니다.

나는 이것을 권하고 싶습니다 :

private static class ThumbnailTask extends AsyncTask<Integer, Void, Bitmap> { 
    private final WeakReference<ImageView> imageViewReference; 
    private final ImageView yourImageView = null; 
    public ThumbnailTask(ImageView imageView) { 

     imageViewReference = new WeakReference<ImageView>(imageView); 
    } 

    @Override 
    protected Bitmap doInBackground(Integer... params) { 

     Bitmap image = fragment.getAlbum().getPhotos().get(params[0]).getImage(Utils.THUMBNAIL_SCREEN_SIZE); 
     return ThumbnailUtils.extractThumbnail(image, 40, 40); 
     if (imageViewReference != null) { 
      yourImageView = imageViewReference.get(); 
     } 
    } 

    @Override 
    protected void onPostExecute(Bitmap bitmap) { 
     if (isCancelled()) { 
      bitmap = null; 
     } 

     if (imageView != null) { 
      imageView.setImageBitmap(bitmap); 
     } 
    } 
}