2012-03-30 12 views
4

私はのListViewを持っています。正直言って、私は画面上で同時に多くのものを持っています。私のTegra 3デバイスは遅れを開始しました。なぜ私は本当に混乱しました...私はそれぞれよりも見つけましたListViewAdaptergetView()メソッドはすべて表示されます行すべて時間アニメーションが画面上で実行されます。それは私に毎秒数百通のコールを与えます!これらのコールの多くは、ListViewの のすべてのレイアウトがconstサイズであるため、これらのコールのほとんどはmeasure()onMeasure()ListViewの両親の呼び出しであり、これは無駄です。ListView getView()があまりにも頻繁に呼び出される

私の質問は:これらの呼び出しを排除する方法ですか?もちろん、私は適切な呼び出しを残したい(AdapternotifyDataSetChanged()に項目を追加したため)。

私はほとんど何も試みませんでしたが、リスト全体が描画されません(onMeasure()をオーバーライドし、super.onMeasure()を呼び出さずにconstサイズを返すように強制する)か、またはしばらく更新を停止します。

答えて

3

getView()メソッドをどのように実装しましたか?正しい方法で実装すると、遅れはほとんどありません。

これは本当に、本当に良いビデオチェックアウト:

ロマンはない、それに対してそれと連携、言ったように。ベストはメジャー()だけを残し、アダプターに焦点を当てることです。あなたは正しくそこに物事を行う提供

+0

リンクをありがとう、私はそれを見ますが、私はどのような方法で私のgetView()メソッドを最適化できるとは思わない。:/ –

+0

良い解決策は見つかりませんでしたが、私を最も多く与えたのはあなたのリンクの映画だったので、これを答えにします。 –

+0

ありがとう、そのビデオは驚くほど便利です(getViewの高速化のためのヒント)。私はリンクを修正する(それは壊れていた)とスライドへのリンクを追加する自由を取った(1時間を見たくない人のために)。 – Heinzi

3

のListViewがどのように実装されるか厥..私はそれがパフォーマンスのオーバーヘッドが発生しますとは思わないが.. ..

たとえば...

インスタンス化しないでくださいビューを膨張させることはコストのかかるプロセスであるgetViewメソッドメソッド内LayoutInflator、クラスレベルで..

それを行うと、convertView==nullか、他がちょうどconvertViewを返す場合にのみ表示を膨らま.. ....

+0

さて、私はアプリレベルでそれをやっていますが、それは私に何も与えません。もちろん私はビューをリサイクルし、可能な限り膨らませないようにしようとしています。 –

+0

@FenixVoltres ..あなたが直面している問題は何ですか?またはあなたはただ複数のカルルスを避けようとしています,,,, – ngesh

+0

問題は、私の活動の中で、 (私はそれを参照してください)無駄に呼ばれるアダプタ内のビュー。 –

2

これは、ListView.onMeasure()AbsListView.obtainView()を呼び出し、リストアダプタからのビューを要求するという根本的な理由があります。したがって、あなたの見解がアニメーションを通じて再測定されている場合、あなたのパフォーマンスは非常に悪くなります。さて、あなたのような

2

は、あなたの高さが変更された場合、あなたのListViewは停止せずにチェックする高さにwrap_contentでも、これらの呼び出しはListViews両親のmeasure()onMeasure()呼び出しによるものであり、私はあなたがheight=wrap_contentを使用していると確信していると述べました。

したがって、解答はとなり、height=fill_parentとなります。 これがあなたを助けてくれることを願っています。

+0

くそー、そうだよ!どうもありがとう。私は 'wrap_content'を持っていて、同じ問題がありました。あなたは私を救いました。 –

関連する問題