ジャンル不定の日記です。

ListViewもむずい・・・

引き続きAndroidのアプリ開発について勉強中だが、widgetについては全て最初にやったTextViewと似たような使い方だと思ったんだが、
リスト表示する時に使うListViewを使ってみたら、凄く難解だった・・・
APIがJavaでできてて継承が大量にあって目的のメソッドがどこにあるのか探すのが大変だからと思う。
クラスが細かく分かれてて、GUIアプリはGTKくらいしか触ったことはないが、桁違いにメソッド数多い気がする。


今回ハマったのはListViewだが、その前に前回のSQLite関連で、
前回はandroid.content.ContextWrapperのopenOrCreateDatabaseでDB作成をしたが、初期化の処理を考えるとやっぱSQLiteOpenHelperを使ったほうが良い?
ってことになったが、
SQLiteOpenHelperも試してみたが、やはりpublicなclassを用意しないと無理な気がして難しい。
SQLiteDatabaseにgetVersion()とsetVersion()があって、setVersionでint型のバージョン値を設定、getVersionで取得ってのができることを知って、DB作成直後でバージョンを設定していない場合は0になる。
ifでこれの値を確認して処理を分ければSQLiteOpenHelper使う必要は全く無いね。
PerlではちょくちょくSQLite使うし、MySQLともほぼ変わらんし、Androidでもクエリ投げるだけぽいから、DB関連は問題無さそう。


で、今回のListViewだが、
ListViewにaddFooterViewってメソッドがあって、単にListViewを作成してaddFooterViewでアイテム追加できるもんだと思ったんだが、
どうも、ListViewにsetAdapterでListAdapterを設定しないとリストが使えないみたい。
ListAdapterをListViewと別に作るようなんだが、作るためのクラスが多数あって、どれ使ったら良いんだかわかりにくい。
最終的にArrayAdapterというのを使ってうまく行ったんだが、
ArrayAdapterの使い方をググると、xmlでデータを用意したり、配列からAdapterを作成したりとかで、1個ずつ追加する方法がなかなかわからんかった。

最終的には、
        ListView lv=new ListView(this);
        ArrayAdapter aa=new ArrayAdapter(this,android.R.layout.simple_list_item_1);
        aa.add("Hello World");
        lv.setAdapter(aa);
        setContentView(lv);
こんな感じで、さほど長くないコードで表示できた。
ArrayAdapterの2番目の引数はレイアウトファイルのIDらしいんだが、Rから始まる値で定数がいくつか用意されてる。

今回の実験コードでは黒背景になったけど、ちゃんとアプリ作るなら白背景の仕方とかも知らないとダメだな。

今回のやり方だとリストのアイテムに対してクリックイベントとか設定することは出来ないぽいんだが、
クリックイベントの設定は、ListView全体に設定してクリックされたものを取得する感じでやるみたい。