2012年2月28日火曜日

getView が行数より多く呼ばれる

ListAdapter の getView メソッドが、行数より多く呼ばれることがありました。

行数分呼ぶための対処法を先に言うと
ListView の layout_height は match_parent にしなければならない。
と言うことらしいです。
ちなみに、layout_width の方は関係ないようでした。

こちらに記載されています。
http://stackoverflow.com/questions/2618272/custom-listview-adapter-getview-method-being-called-multiple-times-and-in-no-co

気になったのでどのような動きをしているのか getView の呼び元を追ってみました。

<match_parent の場合>
ListAdapter.getView
ListView.obtainView
ListView.makeAndAddView
ListView.fillDown

<wrap_content の場合>
ListAdapter.getView
AbsListView.obtainView
ListView.measureHeightOfChildren
View.onMeasure

む?全然違うメソッドから呼ばれているのですね。
さらに呼び元を追ってみると、全く違うロジックをたどってきているようでした。
この辺りを追求していくと大変そうなので、一旦やめておきます。
match_parent を設定して、行数分呼ばれるようになったので良しとします。

0 件のコメント:

コメントを投稿