2017-08-07 9 views
2

異なるレイアウトでAndroidのListViewを移入する推奨されるアプローチは複数のレイアウトを持つAndroid ListView:なぜ、 `getItemViewType`を気にする必要はありませんか?

  • getItemViewType(int position)、および
  • getViewTypeCount()
  • を上書きするように思われます。

これは、ここで(例えばhereherehere)多くの質問と回答で明らかにされています。

具体的なコード・サンプル/チュートリアルを見ると、これらのメソッドをオーバーライドすることは正しいアプローチである理由は、しかし、私は本当に見ることができない。

  • 基本的に全体のプロセスはまだのいくつかの並べ替えを持つことに帰着条件付き/スイッチステートメントint getView(...)は、指定された位置のリスト項目に応じて正しいレイアウトを展開します。
  • この条件付き/スイッチは、を手入力でと書かなければなりません。なぜなら、とにかく手で選択したレイアウトを単に膨張させるのであれば、上記の方法をオーバーライドするのはどうしてですか?

主な問題は見ているgetItemViewType署名力を使用すると、あなたが最初の任意のレイアウトタイプに再びこのint型をデコードgetView(...)で、その後intと(にあなたのレイアウトタイプをエンコードするということです...これは、追加の複雑さと可能性を追加しますエラーのため。すべての

答えて

1

まず、ListViewは、基本的には今RecyclerViewで置き換えられる。 を理由は、インフレートコードを使用すると、getItemViewTypeに戻るViewType列挙に基づいて、あなたのために行われていることのようですところで。私はそれがあると思いますビューのリサイクルロジックをhereとしてください。getItemViewTypeを使用して、リサイクルされたビューを返すことができるかどうか、またはそれを呼び出すためにgetViewを呼び出す必要があるかどうかを判断します。

0

あなたは正しいです、私はgetItemViewType()をオーバーライドし、ちょうどgetView()に条件文をかけることなく、いくつかのレイアウトでリストビューを使用していた、

その後、私はRecyclerViewへの移行を行なったし、その後、getItemViewType()が返される型がどのようなビューをマークするものであるため、実際に感知しますリサイクルされているものとリサイクルされていないもの。

私にとってRecyclerViewははるかに優れています。RecyclerViewに切り替えることを考えましたか?

0

ListViewでも、アダプタに複数の種類のレイアウトが必要な場合は、getItemViewType()が必要です。

あなたはgetView()はまだビューの右のタイプで動作するように修正されなければならないことを正しいですが、正しくgetItemViewType()を実装することgetView()に渡されたconvertView引数が右の構造であることを確認するものです。 getItemViewType()を上書きしない場合は、ListViewを実行するビューのリサイクルを無効にします。

関連する問題