6

私はListViewそれらの中にレイアウトを持っています。レイアウトが一方向に見える必要がある場合もあれば、他の方向に見える必要がある場合もあります。それらは主に、さまざまな重みサイズなどのさまざまな領域に配置されたテキストです。他のビューと比較したメインビューの比率は約5:1です。変更が必要な場合は、ビュー全体の2/3のみが変更されます。

私には2つの選択肢があると思います:

  1. (現在の方法)1つのレイアウト(リサイクルされたビューはすべて同じであるため、再膨張する必要はありません)と、ビューの2番目の2/3は、変更が必要になるまで非表示になり、コードを記述します。それを表示し、ビューの元の2/3を非表示にします。

  2. (別の方法)1/3レイアウトが複製され、それぞれが他の2/3にある2つのレイアウト。次に、異なるレイアウトの1つを使用する必要がある場合、ListViewリサイクラーからの古いビューは破棄され、新しい正しいビューが膨らみ、リストが移動されると再び元に戻ります。

だから私がここで求めているのは、同じレイアウトの一部を非表示/表示して、のリサイクル業者がListViewより多くのレイアウトを膨らませるのを防ぐか、余分な非表示のビューがない2つのカットダウンレイアウトを持ち、それらが膨らんだときにそれらを膨らませる方が良いということです必要ですか?

4

2 に答える 2

3

これらのレイアウトの主要部分である場合TextViews、パフォーマンスに大きな違いはないと思いますので、どちらの方法でもかまいません。はオプション2を選択します。理由は次のとおりです。

  1. 通常の行レイアウトと特別な行の数の比率は大きいです。単一のレイアウトアプローチを維持する場合は、通常または特別の各行のコードでレイアウトを変更する必要があります。これはView通常の表示時に2/3の部分が非表示になっているリサイクルを処理できるためです。1つ(したがって、毎回レイアウトを変更することになります)。2番目のオプションを使用する場合は、getViewメソッドからこの部分を削除し、を使用して、処理している行タイプを確認できます(メソッドでswitch毎回行レイアウトを変更する必要がないため、ハンドルを使用できます)。正しいタイプの行レイアウトを提供することによって)。別のレイアウトファイルを(1回)膨らませる心配はありません。これは、パフォーマンスに影響を与えることを恐れるわけではありません。getViewListView

  2. 1つのタイプのレイアウトを使用するとViews、ユーザーに表示されなくてもメモリに残っていることを意味します(したがって、がListViewさらに膨らむのを防ぐことができますViews(実際には1回だけ)が、同時に占有していますユーザーに表示しないものでより多くのメモリ)。最初のオプションには、2番目のオプションではなく、すべてのビューを自由に使用できるため(ユーザーにビューの一部が表示されない場合でも)、行へのデータのバインドがより簡単になるという利点があります。行タイプに基づいて表示する必要のあるデータを確認します。

  3. コードの可読性。2つの行タイプがあり、メソッドでどちらを取得するかをテストすることでgetView、各タイプの行にどのロジックがあるかを確認する方が意味があります。また、将来これらの行レイアウトを変更したり、行タイプを追加したりする場合は、より良いでしょう。

行タイプのListView提供を支援する限り、ビューのリサイクルに優れた効果を発揮します。編集:ListViewは、アダプターで宣言したタイプごとに再利用されたビューを保持します。したがって、ListViewは2番目のレイアウトを最初に見つけたときにのみ膨らませListView、次にタイプのある行が必要になると、リサイクルされたものを使用します(1番目と2番目の行の2種類のリサイクルされたビューを維持します)タイプ)。

于 2012-05-10T05:15:10.037 に答える
0

実際、この少しの余分なGC IMHOは、あなたの決定の原動力にはならないはずです。

維持しやすく、理解しやすいルートを選びます。

また、次のような便利なincludeタグがxmlにあります。

<include
    android:id="@+id/abc"  
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    layout="@layout/abc"   , where abc = the xml  file you want to include
    />    
于 2012-05-10T05:14:38.400 に答える