androidアプリ開発 2/25 ListViewに表示される値の修正
【今日の作業】ListViewに表示される値の修正
※プログラムを修正。
[作業の中で起きた問題(解決)]
<問題1> MainActivityで継承しているActionBarActivityをListActivityにした場合、
ListViewのIDが取得できなくなってしまった。
<解決1> MainActivityのレイアウトファイル内のListViewのidを
"@id/android:list"に変更する。
※どうやら、Activityクラスに対し、ListActivityを継承した場合、
ListViewのidは上記のandroid:listでなければならないらしい。わかんねー!
出展:http://mitoroid.com/category/android/android_listview1.php
<問題2>ListViewのアイテムに、com.example.から始まる謎の値が設定されてしまう。
→そもそもリスト上のTextViewに値が設定されていなかった。
(今回のプログラムでは、listのアイテムにTextViewを設定すべく、listアイテムのレイアウトファイルを用意している。)
<解決2>
ListViewのSetAdapterメソッドの実行処理を追記。
引数はBaseAdapterオブジェクトとした。
今回のプログラムのTextViewへの値設定は、BaseAdapterを継承した内部クラスを
定義し、内部クラス内でオーバーロードしたgetViewメソッドの中で行っていた。
しかし、setAdapterメソッドの引数をその内部クラスのオブジェクトとしていなかったため、TextViewの値設定処理が行われなかった。
そのため値がおかしくなっていた?ということになると思われる。 またケアレスミスですか....
setAdapterメソッドの記述例を以下に記す。
lvはListView,
SongListsはListViewに設定するクラスオブジェクトのリスト。
①ListActivityを継承している場合
setListAdapter(new SongListAdapter(this,songLists));
②ListActivityを継承していない場合
lv.setAdapter(new SongListAdapter(this,songLists));
最初は原因がListActivityを継承していないことであると思っていたので、継承した後に①を記述。
後に②の方法も試してみたらできてしまった。 わざわざ継承する必要なかったじゃ~ん。
ちなみに①のsetListAdapterメソッドは、ListActivityを継承しないと見つからない様子。要注意。
[結果]:ListViewのアイテムに文字列が表示されるようになりました。
(How)
ListViewにBaseAdapterを継承した内部クラスオブジェクトを設定した。
[次の作業]
アイテムをクリック→アイテムのクラスオブジェクトから値を取得
→クラスオブジェクトのメンバ変数を使って、詳細テーブルの値を取得
→別画面に表示
まずはクラスオブジェクトのメンバ変数を使って、SQLのSELECT文作るところからかなぁ