Mam ListView
, który wyświetla w każdym wierszu obraz pobrany z internetu i ciąg znaków.Android - ListView - wywołanie getView() na żądanie
Generalnie działa dobrze. Jednak chcę przejąć kontrolę na drodze, gdy widoki (rzędy) są zawyżone. Domyślnie, gdy wiersz jest widoczny, wywoływana jest metoda adaptera getView()
.
To oczywiście nie jest jednym z najlepszych zachowań, bo jeśli mam ListView
z kilkuset płyt, i muszę dotrzeć do tych na dole, podczas przewijania ListView
metoda getView()
zostanie wywołana dla każdego rzędu, aż dojdę do stopki.
Więc chcę zadzwonić getView dopiero po przewinięciu i ListView jest wstrzymana/stan czuwania, ale nie mam pojęcia, jak go o to:
Oto jak zacząłem:
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState==SCROLL_STATE_IDLE){
// Invoke get view only on visible items
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});
to getView mojego adaptera:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, parent, false);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.textView);
holder.image = (ImageView) convertView.findViewById(R.id.imageView);
holder.position = position;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(data.get(position).getTitle());
holder.image.setImageResource(R.drawable.ic_launcher);
new LoadImageAsync(data.get(position).getUrl(), holder.image).execute();
return convertView;
}
Proszę dać mi jakieś wskazówki, w którym należy szukać w tym celu: Call getView() tylko po przewinięciu, a tylko dla visib le przedmioty.
sprawdź ApiDemos, sekcja Efektywna przejściówka –
@TomislavNovoselec, dziękuję za podpowiedź. To jest warte odwrócenia uwagi. –