0

項目のリストを表示する ListView があります。各項目にはアイコンといくつかのテキストがあります。

ListAdapter.getView() メソッドの「convertView」パラメーターを使用して、パラメーターが null でない場合に新しいビューを作成するのではなく、既存のビューを変更しています。

ListView は、表示されているビューポートからスクロールアウトした後にのみ古いビューをリサイクルすることを期待していましたが、そうではないようです。ListAdapter.getView() を呼び出すたびに、ListView が「convertView」パラメータで同じオブジェクトを提供しているようです。単一のビューが画面にレンダリングされ、getView() への次の呼び出しで再度送信されます。

以前にレンダリングされたビューを変更したいので、これは私にとって重大な問題を引き起こします。アイテムのアイコンを取得するバックグラウンド スレッドがありますが、これには「かなりの」時間がかかり、ListAdapter.getView() ビュー レンダリング コード内に配置するのは許容できないユーザー インターフェイスの負荷になります。

ListView が現在画面に表示されているビューを再利用しないようにする方法はありますか? ビューの再利用によるパフォーマンスと効率の向上を実現し、バックグラウンド スレッドでアイコンを読み込めるようにしたいと考えています。

4

2 に答える 2

0

問題は、Androidが特定の条件下でレイアウト/測定に使用するために、レンダリングされない追加の一時ビューを作成していることです。このビューが画面にレンダリングされたという私の仮定は正しくありませんでした。

于 2012-11-29T11:08:58.213 に答える
0

私がしばらく抱えていた同様の問題を抱えていると思います:リサイクル時にリストビューまたはグリッドビューで古いアイテムがしばらく表示される

getView() の先頭で、リストのリサイクルされたアイテムを「リセット」する必要があります。初期状態が何であれ、それらを進行状況バーに戻すか、非表示にします。彼らが正しいデータを取得するまで。

于 2012-09-04T01:32:57.380 に答える