2011-07-03 15 views
9

私はlistViewを使用してAndroidアプリを開発しています。これは1つのアクティビティでカスタムカーソルアダプタを使用し、bindview()がリストの各行に対して2回起動していることに気付きました。ここでBindView()とNewView()メソッドを調べているうちに、私はリストビューの幅のWrap_Contentを持つことは悪い考えでした。私はFill_ParentとViolaに切り替えました。bindview()とnewview()はそれぞれ、それぞれの項目に対して1回だけ起動します。Wrap_ContentがBindViewを2回以上起動させるのはなぜですか?

私はAndorid OSの内部をよりよく理解できるように、Wrap_Contentがbindview()を何度も起動させた理由を知りたいと思います。

私はGoogle、アンドロイドのデベロッパー向けドキュメント、ここでは運がないといくつかの検索を行っています。

本当にありがとうございます。私はそれが最初の3つの項目を測定するようになりますListViewwrap_contentの幅(または高さ)を設定し、GoogleのI/Oからの映像から正しくリコールとその寸法を基準とした場合

おかげで、 ジョージ

答えて

10

それらのオフ。最初の3つの項目を測定するには、bindView()を呼び出す必要があります。測定が終わると、それは完全に入力され、bindView()を最初の3およびそれ以降のものに再度呼び出します。

これは、ListViewが、リスト内のアイテムの数が無限になる可能性がある場合、画面上のものだけを保持するためです。それは図面フェーズで永遠に詰まっている可能性があるので、最大のアイテムにはwrap_contentに設計されていません。

+2

正解、私は昨日同様の[質問](http://stackoverflow.com/questions/6557240/expandablelist-getchildview-running-twice-per-child/6557284#6557284)に答えました。ビデオ/時間はそこに提供されます。 – dmon

+1

はい、これは正しいです。 ListViewは測定目的でアダプタのgetViewを呼び出すことがあります。 getViewの呼び出しの結果が画面に表示されるか、またはgetViewの最新の呼び出しが現在表示されているものとすべて関連しているという保証はありません。 – adamp

+0

グレンンドに感謝します。まさに私が探していたもの。 –

関連する問題