web-dev-qa-db-ja.com

ListViewまたはTableLayout?

どちらを学ぶべきかについて、私は今とても混乱しています。私はiPhoneアプリの開発者で、現在Android開発について学習しています。

ListViewを使用して文字列の静的配列でAdapterを使用する方法を学びました。私はiPhoneでカスタムセルを使用することに慣れており、主にTableViewsで画像やテキストなどの動的コンテンツを表示するために使用しています。

では、Androidでそれを行う方法はどれですか? TableLayoutまたはListView

25
Akash Malhotra

他の人がすでにコメントで述べているように、どのタイプのレイアウトを使用するかを具体的に決定する前に、まず何をしたいかを明確に定義する必要があります。ただし、同じ目的を達成するために選択するレイアウトクラスがいくつかあることが多いため、使用するレイアウトクラスのタイプを決定しようとすることから生じる混乱は確かに理解できます。たとえば、縦方向にスクロールするアイテムのリストを作成するには、最初に縦方向のLinearLayoutを選択し、それをScrollView内に配置します。ただし、その一方で、同様の最終結果を得るには、ListViewを適切なAdapterと一緒に使用できます。

同様に、垂直にスクロールできる項目のグリッドを表示するには、TableLayout内でScrollViewを使用できます。または、GridViewを使用しても、適切なAdapterを介してデータを提供することで、同様の結果を得ることができます。

最初の主な違いは次のとおりです。LinearLayoutTableLayoutなどのクラスでは、子要素をXMLレイアウトで、またはプログラムでコードで指定する必要があります。 ListViewGridView(およびその他いくつか)のようなクラスは、Android.widget.AdapterViewのサブクラスであるため、非常に異なります。 AdapterViewクラスの特別な点は、Adapterを使用してデータをクラスにバインドすることです。したがって、アイテムの垂直リストの例に戻ると、配列データに基づいてLinearLayout内に子リストアイテムのグループを表示している場合、プログラムで子ViewsをそのLinearLayoutに入れます。一方、ListViewでは、子アイテムを表す個々のViewsは適切なAdapterから提供されます。したがって、プログラムでレイアウトにすべての子アイテムを配置する(たとえば、LinearLayoutまたはTableLayoutの場合のように)代わりに、Adapterベースのレイアウトは代わりにAdapterは、必要に応じて子Viewsを取得します。

最後のポイントは、Adapterベースのレイアウトについて理解する必要がある次の重要な違いです。多くのデータがスクロールされて表示されない状況では、大量のデータを表示する方がはるかに効率的です。たとえば、ListViewを使用すると、LinearLayoutにすべての項目を入力してScrollView。この効率の理由は、AdapterViewベースのレイアウトには、通常、一度にすべての子Viewsが含まれていないためです。代わりに、ユーザーがリストをスクロールすると、既存の子ビューがAdapterによって「リサイクル」または「変換」され、次の子要素が表示されます。例でこれを説明するには、100項目の垂直スクロールリストが必要です。ただし、画面は、7を一度に表示するのに十分な大きさしかありません。 LinearLayout内でScrollViewを使用して100個のリストアイテムを表示するとします。つまり、LinearLayoutコンテナには100個の子Viewsがあります。これらの子は常にレイアウトに存在し、一度に画面に表示できるのは7つだけであっても、スクロールイベント中にシステムで処理する必要があります。これには余分なCPU時間とかなりの量のRAMが必要であり、スクロールが遅くなる場合があります。現在、ListViewを使用すると、レイアウトにはおそらく7つまたは8つの子Viewsのみが含まれます。ユーザーがスクロールすると、それらの子Viewsは、データのバインドに使用するAdapterによって動的に変換または再インスタンス化されます。ユーザーはより速く、よりスムーズなスクロール操作を体験できます。プログラミングの観点からは、Adapterを介してデータのリストをバインドする方が通常ははるかに洗練されています。 Bitmapsのスクロールリストまたはグリッドを処理している場合、Androidデバイスのメモリ制限は、AdapterViewの使用がかなり重要であることも意味します。

これに答えるとき、私はあなたがスクロール可能な項目の垂直または表形式のリストを表示しようとしていると仮定しました。おそらくBitmapsを含み、私はタイプに集中しています。データのレイアウトとスクロールを実現するために使用するレイアウト。ただし、LinearLayoutTableLayoutなどのレイアウトクラスは、アプリケーションの個々のレイアウトビルディングブロックを形成するために常に使用する重要なクラスです。リスト全体が画面に収まることが保証されており、スクロールできない場合、Adapterを使用することによる追加の複雑さ(それがis本当にそれほど複雑ではないこと)は無意味かもしれませんそして、あなたは単にTableLayoutか何かを使いたいかもしれません。

78
Trevor

Android iOSと同等UITableViewRecyclerViewです。

これは非常に強力で、アタッチする Adapter のタイプに応じて、さまざまなソースからのデータを入力できます。あなたはこれを見てみたいかもしれません RecyclerView codelab

6
keyboardsurfer

1。必要な場合dynamic data オン CUSTOM VIEWリスト形式で、次にListViewBaseAdapterまたはArrayAdapterを使用する方法です。

2。TableLayout完全に異なる用途のものになります 、ほとんどの場合、スタック形式で表示する必要があるデータを表示するために使用します。

すばやく理解して実装するには、以下のリンクを参照してください:

http://www.ezzylearning.com/tutorial.aspx?tid=1763429

http://www.vogella.com/articles/AndroidListView/article.html

2