ListView
インターネットから取得した画像と文字列をすべての行に表示するがあります 。
一般的には問題なく動作します。ただし、ビュー(行)が膨らんでいるときは、途中で制御したいと思います。デフォルトでは、行が表示されている場合getView()
、アダプターのメソッドが呼び出されます。
もちろん、これは最良の動作の1つではありません。ListView
数百のレコードがある場合、下部のレコードに到達する必要がある場合、をスクロールしながらListView
、getView()
フッターに到達するまですべての行に対してメソッドが呼び出されます。
したがって、スクロール後にgetViewを呼び出したいのですが、ListViewが一時停止/アイドル状態になっていますが、これを行う方法がわかりません。
これが私が始めた方法です:
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) {
}
});
これは私のアダプタのgetViewです:
@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;
}
これを実現するためにどこを見ればよいかについて、いくつかの指示を教えてください。スクロール後にのみ、表示されているアイテムに対してのみgetView()を呼び出します。