0

BindView를 항목 당 한 번만 수행하는 방법이 있는지 알고 싶습니까?사용자 정의 SimpleCursor 어댑터 BindView 호출

화면에서 멀리 스크롤하는 항목이 파괴되고 있습니까? 그들이 돌아올 때 bindview를 다시 실행해야합니까?

이유는 내 어댑터에서 이미지를 다운로드하여 항목에 설정했기 때문입니다.

응용 프로그램을 종료하지 않아도 이미지를 다시 다운로드 할 때 스크롤합니다.

난 이미 다운로드 너무도 그래도, 그것은합니다 (asyntask이 어댑터라고 함) 다시 asyntask을 미리 형성됩니다 디스플레이에 항목 "반환"할 때마다 호출되는의 Bindview

난에 BLOB을 저장하려고

단지 메신저 확실하지 나뿐만 아니라 chrisbanes pulltorefresh 목록보기를 사용하고있는 배열

if(photoBArray != null){  
      Bitmap bitmap = BitmapFactory.decodeByteArray(photoBArray, 0, photoBArray.length); 
       holder.icon.setImageBitmap(bitmap); 
      }else{ 
      holder.icon.setImageResource(R.drawable.loader); 
      String urlString = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=100&photoreference=" 
        + c.getString(c.getColumnIndex(PlacesDBHelper.PHOTO_REFERENCE_COL))+"&key=API_KEY"; 
      Log.e("Photo REFERENCE", c.getString(c.getColumnIndex(PlacesDBHelper.PHOTO_REFERENCE_COL))); 
      try { 
       URL url = new URL(urlString); // create new URL object from url string 
       new ImageDownloader(holder.icon, this).execute(url); 
      }catch (Exception e){ 
       Log.e("Error in url", e.getMessage()); 
      } 
      } 

,에서 비트 맵을 만들 때 asyntast를 호출 할 때마다 다운로드 후 내 데이터베이스는 알고 문제의 야기 할것이다 그게 경우

보 ttom line 질문 : 아이템이 화면에 다시 들어가서 다시 만들어 질 때 꾸준하고 준비가되어있는 것처럼 보이게 만드는 방법은 무엇입니까? (dowloand 이미지를 사용하지 않고 bitmap 만 설정하더라도 setimagebitmap의 동작은 느린 전화에서 볼 수 있습니다.)

미리 감사드립니다.

답변

0

ListView의 전체 지점은 행보기를 재활용합니다. 그것들은 파괴되지 않고, 다른 행에 대한 새로운 데이터에 바인딩되도록 어댑터로 다시 전달됩니다. 화면에서 항목을 충분히 멀리 스크롤 한 다음 다시 화면에서 스크롤하면 getView (또는 커서 어댑터의 경우 bindView)이 다시 호출 될 것으로 예상됩니다.

다운로드 작업과 어댑터 사이의 이미지 캐싱 계층이 필요합니다. bindView이 발생하면 먼저 캐시를 확인하여 이미지가 있는지 확인하십시오. 그렇다면 사용하십시오. 그렇지 않은 경우 다운로드하여 캐시에 추가 한 다음 사용하십시오.

+0

우선 감사합니다. 그렇다면 다른 질문이 있습니다. Im 어댑터를 사용하여 이미지를 다운로드하고 말한대로 일단 다운로드가 끝나면 내 DB에 저장해야합니다. 내 문제는 내가 데이터를 추가해야하는 이유를 모른다는 것입니다. 왜냐하면 다운로드 한 이미지 원본 항목의 ID 나 POS가 없기 때문입니다. 비동기 다운로드를 수행하기 위해이 혀를 사용했습니다 : http://javatechig.com/android/asynchronous-image-loader-in-android-listview 의견이 있으십니까? –