毎回のようにはまってしまう。androidでListViewというリスト形式のものを表示する場合は、ListViewAdapterという便利なものがある。List形式のものを渡せば、表示してくれて件数が多いと自動的にスクロールする機能まで付加してくれる。
使わない手はない。
難しいコードはないのだけど、はまってしまった。
ArrayAdapterを継承したカスタムクラスを作成し、以下のコード内でリストを表示する。
@Override public View getView(int position, View convertView, ViewGroup parent) { CustomData item = (CustomData) getItem(position); if (null == convertView) { convertView = layoutInflater_.inflate(R.layout.listdata, null); }
CustomDataも独自クラスで、このクラスを使うことで色々な形式のデータを使うことができる。ArrayListとかでもいいけど、CustomDataクラスを作ることで、画像(アイコン)や文字などを一緒に使うことができる。
実行する側の処理も書いて、実行してみると1行しか表示されない・・・ここから色々とデータを確認する。
そもそも、渡しているデータが1行なのか?渡している形式が問題なのか???
など問題となりそうな事を想定して、実行中のデータなどを確認してみても、データがちゃんと数件分渡っている。データが確認できるということは、形式の問題でもない。
なんだろう・・・・
実行中の状態で確認すると、positionがずっと0のままで変化しないのだ。それでは、1件しか表示されないわけだ。本来は、データの件数に応じて、0から加算されないといけない。
問題なのは、getViewメソッド内のpositionの値。
ではやはり、受け取ったデータの件数が少ないのか?そこで、getcount()とメソッドで件数がちゃんと認識できているのか確認するとちゃんとデータ件数の数字と合っていた。
「わけわかめ・・・」となって、ネットで検索してみると、ListViewの表示側の問題という内容が。
つまり、コードの中の話ではなく、レイアウトを形成しているxmlファイルのほうだと。表示サイズが最小だと表示できないとかなんとか。
そこで、レイアウトファイルを変更して、最大と指定すると・・・表示された・・・
なんだかなー・・・件数分を取得して、表示が1行分しかないとかなら理解できるけど、データも取得できないって・・・わからん。
実際には、Activity ==> TabLayout ==> PagerAdapter ==> FragmentManager ==> Fragment ==> ListView ==> ListViewAdapter という形で表示する。
Activityで取得したデータをListに表示するだけで、これだけデータの受け渡しが発生してしまう。
ここでも、色々と時間がかかってしまったで、後日まとめよう・・・