Androidの複雑なレイアウトのListView最適化の考え方
2271 ワード
プロジェクトでは、内部の複雑なレイアウトのlistviewが使用され、各itemにはダイナミックなサブitemがあり、listviewのitemに相当し、listviewのスタイルもあります.最初はlistviewを1つ使い、itemにLinearLayoutを追加し、コードダイナミックな生成子item viewを追加するという表現を理解してほしい.
しかし、進捗状況が最適化されていないため、今振り返ると、viewholderを使っていますがlistviewバッファのメカニズムは全く機能していません.item showごとにremoveAll子itemが必要なので、もう一度追加します.描画時間が長すぎてカートンになりました.
どうやってこの問題を解決しますか?
ちょうどgoogleはsupport v 7でrecyclerViewを発売しました.より良いキャッシュ最適化メカニズムを持っています.私は救いの星を手に入れたら、すぐにlistviewをrecyclerViewに変えましたが、効果はあまりよくありません.私が想像していた効率の向上はありません.よく考えてみると、recycleViewはlistViewの多typeの状況に対して最適化しただけで、実際の需要の中ではitemの中で動的にitemを生成し、recyclerViewの優位性を使用していません.
そこで自然と次のように考えられるのが,動的に生成されたItem部分を乾かし,データを1つ1つに分割したlistview itemである.しかし、このような作業量が大きくなるのではないかと心配しています.実際の抽象化の過程で発見するのは簡単で、元のモデルデータを7つの異なるタイプのモデルに分割し、getViewの時にpostionで現在のモデルのtypeを取得し、それから異なるView itemを返し、簡単に1つのitemしかなかったlistviewを7つのタイプのItemのlistViewに分割しました.走り出すと、スピードがザラザラして、もっとitemのような感じになります.
ListViewは複数のタイプのItemをサポートする場合にピットがあります.BaseAdapterを継承する場合は、次の2つの方法を書き直さなければなりません.
この時、子itemを動的に生成するメカニズムが乾いた以上、recyclerViewを思い出しました.
recyclerViewはListViewよりも優れているのではないでしょうか.やると言ったらやる、10分で入れ替わった(考え方はレンガを運ぶ効率があるのか速いのか)、走ってみると、やっぱりザッと(実は肉眼ではlistViewとの違いが分かりにくい).しかしgoogleについて行くのは間違いないはずです.彼は自分で言いました.
The
似たようなニーズのある学生を助けることを望んでいます.
ListViewには複雑なレイアウト、特に動的に生成されたレイアウトのサブレイアウトがあり、元のItemを異なるタイプに分割してrecyclerViewを使用することを考慮することができます.
しかし、進捗状況が最適化されていないため、今振り返ると、viewholderを使っていますがlistviewバッファのメカニズムは全く機能していません.item showごとにremoveAll子itemが必要なので、もう一度追加します.描画時間が長すぎてカートンになりました.
どうやってこの問題を解決しますか?
ちょうどgoogleはsupport v 7でrecyclerViewを発売しました.より良いキャッシュ最適化メカニズムを持っています.私は救いの星を手に入れたら、すぐにlistviewをrecyclerViewに変えましたが、効果はあまりよくありません.私が想像していた効率の向上はありません.よく考えてみると、recycleViewはlistViewの多typeの状況に対して最適化しただけで、実際の需要の中ではitemの中で動的にitemを生成し、recyclerViewの優位性を使用していません.
そこで自然と次のように考えられるのが,動的に生成されたItem部分を乾かし,データを1つ1つに分割したlistview itemである.しかし、このような作業量が大きくなるのではないかと心配しています.実際の抽象化の過程で発見するのは簡単で、元のモデルデータを7つの異なるタイプのモデルに分割し、getViewの時にpostionで現在のモデルのtypeを取得し、それから異なるView itemを返し、簡単に1つのitemしかなかったlistviewを7つのタイプのItemのlistViewに分割しました.走り出すと、スピードがザラザラして、もっとitemのような感じになります.
ListViewは複数のタイプのItemをサポートする場合にピットがあります.BaseAdapterを継承する場合は、次の2つの方法を書き直さなければなりません.
// ListView , item , item <span style="font-family: Arial, Helvetica, sans-serif;">getItemViewType , item , listView tag</span>
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
// 1, listView,listView
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
この時、子itemを動的に生成するメカニズムが乾いた以上、recyclerViewを思い出しました.
recyclerViewはListViewよりも優れているのではないでしょうか.やると言ったらやる、10分で入れ替わった(考え方はレンガを運ぶ効率があるのか速いのか)、走ってみると、やっぱりザッと(実は肉眼ではlistViewとの違いが分かりにくい).しかしgoogleについて行くのは間違いないはずです.彼は自分で言いました.
The
RecyclerView
widget is a more advanced and flexible version of ListView
. This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views. Use the RecyclerView
widget when you have data collections whose elements change at runtime based on user action or network events. 似たようなニーズのある学生を助けることを望んでいます.
ListViewには複雑なレイアウト、特に動的に生成されたレイアウトのサブレイアウトがあり、元のItemを異なるタイプに分割してrecyclerViewを使用することを考慮することができます.