Deletions are marked like this. | Additions are marked like this. |
Line 15: | Line 15: |
これはSwingであればコンポーネントに対応する。 | ViewはSwingの場合のコンポーネントに対応する。 |
Line 17: | Line 17: |
しかし、ListView等の繰り返し |
しかし、ListViewなど、実行時まで繰り返し数がわからない場合の扱いはSwingとAndroidでは全く異なる概念になる。 Swingでは、リストコンポーネント等に対してデータ(モデル)を与えれば、そのコンポーネント自体の大きさが変化して、すべてのデータが表示できるようにしてくれる。もし、このコンポーネントがScrollPaneの上にあれば、適切にスクロールバーがつけられる。 しかし、Androidではそうはいかないようだ。ListViewに任意の数のデータを表示するには、その同じ数のViewを用意して、それらをListViewに置いてやらないといけない(実際にはそれほど面倒ではないのだが、概念的にはこういうことになる)。 Swingのコンポーネントのように、一つのコンポーネントの中で繰り返しデータをすべて表示するという発想ではなく、必要なだけViewを作成しなければならないのである。 == Adapter == これを簡単に行ってくれるのがAdapterなのだが、この言葉はもちろんSwingの場合とは全く概念的に異なる。 Swingでは主にイベントリスナインターフェースの空の実装を差している場合が多い。 これに対してAndroidでは、「与えられたデータと同じ数の適当なViewを作成して、そこにデータを設定してListViewなどに載せてくれるもの」という意味である。 多くの書籍等の説明では、データとListViewなどをとりもつ役割などと簡単にしか説明していないので、Swing使いには「モデルの役割」であると誤解されてしまう可能性があるのだが、全くそうではない。 == Inflater == さらに、Inflater, Inflate, Inflationという言葉は、これが何を差しているのか、どこを探しても全く説明が見つからない。 これは単純にリソース中のXMLに記述されたView定義をもとにJavaオブジェクトを作成するということらしい。 ただし、単純に一対一、つまり一つのXML定義からただ一つのJavaオブジェクトが作成されるのではなく、inflate操作を行うごとにいくつでもJavaオブジェクトを作成できるようだ。つまり、XML定義は単なるテンプレートである。 このため、例えば、先のAdapterのように「いくつのViewが必要であるかわからない」というケースでは、その数だけ該当するXML定義をInflateしてViewのJavaオブジェクトを作成してやるということになる。 |
AndroidのViewについて
AndroidのViewの概念は、一見他のGUIツールキットと同じように見えるのだが、大きく違うところがある。 様々な書籍やウェブサイトでの記事もこの点を明確にしているところは、ほぼ存在しない。
つまり、Android特有の用語が何を意味するのか全く定義せずに話を進めているため、読む方としては 何のことやらわからないという状態になってしまう。 様々なGUIツールキットを経験している人間であるほど理解不能に陥ってしまう。
※私もまだよくわかっていないため、以下の記述はウソである可能性がある。
Swing等との違い
AndroidではSwing等のコンポーネントと同じように、Viewを入れ子にして画面を作成していく。 ViewはSwingの場合のコンポーネントに対応する。
しかし、ListViewなど、実行時まで繰り返し数がわからない場合の扱いはSwingとAndroidでは全く異なる概念になる。
Swingでは、リストコンポーネント等に対してデータ(モデル)を与えれば、そのコンポーネント自体の大きさが変化して、すべてのデータが表示できるようにしてくれる。もし、このコンポーネントがScrollPaneの上にあれば、適切にスクロールバーがつけられる。
しかし、Androidではそうはいかないようだ。ListViewに任意の数のデータを表示するには、その同じ数のViewを用意して、それらをListViewに置いてやらないといけない(実際にはそれほど面倒ではないのだが、概念的にはこういうことになる)。
Swingのコンポーネントのように、一つのコンポーネントの中で繰り返しデータをすべて表示するという発想ではなく、必要なだけViewを作成しなければならないのである。
Adapter
これを簡単に行ってくれるのがAdapterなのだが、この言葉はもちろんSwingの場合とは全く概念的に異なる。
Swingでは主にイベントリスナインターフェースの空の実装を差している場合が多い。 これに対してAndroidでは、「与えられたデータと同じ数の適当なViewを作成して、そこにデータを設定してListViewなどに載せてくれるもの」という意味である。
多くの書籍等の説明では、データとListViewなどをとりもつ役割などと簡単にしか説明していないので、Swing使いには「モデルの役割」であると誤解されてしまう可能性があるのだが、全くそうではない。
Inflater
さらに、Inflater, Inflate, Inflationという言葉は、これが何を差しているのか、どこを探しても全く説明が見つからない。
これは単純にリソース中のXMLに記述されたView定義をもとにJavaオブジェクトを作成するということらしい。
ただし、単純に一対一、つまり一つのXML定義からただ一つのJavaオブジェクトが作成されるのではなく、inflate操作を行うごとにいくつでもJavaオブジェクトを作成できるようだ。つまり、XML定義は単なるテンプレートである。
このため、例えば、先のAdapterのように「いくつのViewが必要であるかわからない」というケースでは、その数だけ該当するXML定義をInflateしてViewのJavaオブジェクトを作成してやるということになる。