7

ListViewインターネットから取得した画像と文字列をすべての行に表示するがあります 。

一般的には問題なく動作します。ただし、ビュー(行)が膨らんでいるときは、途中で制御したいと思います。デフォルトでは、行が表示されている場合getView()、アダプターのメソッドが呼び出されます。

もちろん、これは最良の動作の1つではありません。ListView数百のレコードがある場合、下部のレコードに到達する必要がある場合、をスクロールしながらListViewgetView()フッターに到達するまですべての行に対してメソッドが呼び出されます。

したがって、スクロール後に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()を呼び出します。

4

1 に答える 1

6

私は最近これに関する記事を読みました... ここに。私はそれを試していませんが、それは健全な理論のようです。

基本的に、スクロールしているかどうかを追跡するために使用するブール値を追加し、それをアダプターのフラグとして使用することを推奨しています。ブール値がtrueの場合(スクロールしている場合)、レイアウトにテキストビューのみを描画します。false(スクロールを停止した)の場合、すべてを描画します。

を使用して、スクロールしていないときに表示されているビューを再描画するようにアダプターに指示しますnotifyDataSetChanged()

于 2012-08-07T14:15:48.563 に答える