2014-01-24 8 views
1

У меня есть следующий код в методе GetView моего адаптера (который заполняет ListView)ListView, проверьте, когда GetView называется последний раз

public View getView(int position, View parent, ViewGroup root) { 
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.my_layout, null); 
    ImageView imageView = view.findViewById(R.id.myImageView); 
    String address = addresses[position]; 
    MyNetworkLibrary.loadAndSetImage(address, imageView); 
    return view; 
} 

Клетка ListView имеет ImageView, в котором они загрузить удаленное изображение.

Метод MyNetworkLibrary.loadAndSetImage загружает удаленное изображение и, когда он получил ответ, устанавливает его в моем ImageView. Проблема в том, что метод getView часто вызывается более одного раза для каждой строки ListView, чем, хотя я использую кеш, поскольку изображение не входит в кеш, мое приложение выполняет более одного запроса для каждой строки.

Есть ли способ узнать, когда getView вызывается в последний раз для строки? Или вы думаете о лучшем решении?

+0

В макете, что значение вы установили для layout_width? – nKn

+0

width = match_parent, height = wrap_content – Massimo

+0

getView вызывается каждый раз, когда строка должна отображаться, поэтому, если пользователь прокручивается вверх и вниз, нет никакого реального «последнего вызова» для getView для этой строки ». Поскольку изображение не входит в кеш ">> почему вы не кешируете свои изображения? Противоположным является сетевой вызов для каждого вызова getView, который был бы плохим для характеристик ... – 2Dee

ответ

1

В этом question было запрошено еще getView(). Поскольку это только моя мысль об этом, я не знаю это точно, но я думаю, что подход, который вы предлагаете в своем вопросе, неверен - я имею в виду, вам не нужно подсчитывать, сколько раз было getView() но вместо этого эффективно обрабатывает назначения.

В качестве альтернативы вы можете загрузить изображения с помощью LazyList, ссылающихся на каждое изображение строки в вашем методе getView(). Но есть еще одно возможное решение (и я думаю, что это также более элегантно), я предложил его в этом другом question. Надеюсь, это поможет вам.

Смежные вопросы