0

Я хотел знать, есть ли способ заставить BindView работать только один раз за элемент?Пользовательский адаптер SimpleCursor BindView вызывает

Элементы, которые мы прокручиваем от экрана, уничтожаемого? и когда они вернутся, мы снова должны запустить bindview?

Причина в том, что я получил свой адаптер для загрузки изображения и установки его на предмет.

при прокрутке изображения загружается снова, даже если я не покинул приложение.

BindView вызывается каждый раз, когда пункт «возвращает» в дисплей, так что даже Тхо я уже скачал его, он будет преформ в asyntask раз (asyntask называется адаптер)

Я даже пытался экономить BLOB на моя база данных после каждой загрузки, чтобы знать, когда называть asyntast и когда просто сделать растровое изображение из массива

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()); 
      } 
      } 

Я использую chrisbanes pulltorefresh ListView, а также, я не уверен если то АНОМАЛЬНЫЙ для задачи

Bo Вопрос ttom line: как сделать элемент устойчивым и готовым, когда он вернется на экран и не будет создан снова? (даже если я не dowloand изображение и только установка растрового изображения, действие setimagebitmap может быть видно на медленном телефоне)

Заранее благодарен!

ответ

0

Весь смысл ListView - это переработка строк. Они не уничтожаются, они передаются обратно адаптеру для привязки к новым данным для другой строки. Ожидается, что getView (или bindView в случае адаптеров курсора) будет вызываться снова, если вы прокрутите элемент с экрана достаточно далеко, а затем прокрутите его назад на экране.

Что вам нужно, это слой кэширования изображения между задачей загрузки и адаптером. Когда происходит bindView, сначала проверьте кеш, чтобы увидеть, есть ли изображение. Если это так, используйте его. Если это не так, загрузите его и добавьте в кеш, а затем используйте его.

+0

Прежде всего, спасибо большое! Если это так, у меня возникает другой вопрос. Я использую адаптер для загрузки изображения, и, как вы говорите, как только я закончу его загрузку, мне нужно сохранить его в моей БД. Моя проблема в том, что я не знаю, где я должен добавить данные, потому что у меня нет идентификатора или POS загруженного исходного файла. Я использовал этот прием для предварительной асинхронной загрузки: http://javatechig.com/android/asynchronous-image-loader-in-android-listview У вас есть предложения? –