2012年5月24日木曜日

android-bindingを使ってみる その3

今回はリストビューをバインドして使ってみました。
android-bindingのサンプルでも提供されていますが、以下を試してみました。
  • リストビューのアイテムとして複数のウィジェットを使用できること。
  • アイテムを随時読む込んで表示するような実装が可能なこと。

android-bindingのMarkupDemoのDynamic Listsのソースを参考にしています。
http://code.google.com/p/android-binding/source/browse/#svn%2Ftrunk%2FAndroidBindingMarkupDemo

実装した結果は以下にコミットしています。
https://bitbucket.org/twopack/android-binding-sample/changeset/3136f4d0742e

リストビューのアイテムとして複数のウィジェットを使用

BindingToCollection - android-bindingに書かれている ArrayListObservableを使用してリストビューに対してバインドします。
Tにはリストビューのアイテムのレイアウトに対してバインドする変数を定義したクラスを作って指定します。
ソースは以下のようなものになります。
public transient ArrayListObservable<ListViewSampleItem> listviewItems = 
new ArrayListObservable<ListViewSampleItem>(ListViewSampleItem.class);
対応するレイアウトのXMLは以下です。
<ListView android:layout_width="match_parent"
    android:layout_height="match_parent"
    binding:itemSource="listviewItems"
    binding:itemTemplate="@layout/listview_item" />

@layout/listview_itemでリストビューの項目レイアウトを定義して、それに対してのViewModelをListViewSampleItemクラスで定義しています。こちらは以前の投稿と同じ形です。


アイテムを随時読む込んで表示するような実装が可能なこと。

上記のリストビューの項目に対するViewModelのクラスであるListViewSampleItemクラスで、LazyLoadRowModelクラスを継承しています。
このクラスでdisplayメソッドとhideメソッドをインプリしています。
displayメソッドは項目を表示する必要がある場合に、hideメソッドは項目を表示する必要がなくなった場合に呼び出されます。
実装では、画面以上の項目を用意しておき、最後の項目を表示した際に、項目を追加するような処理にしています。
冒頭のサンプルや以下のページを参考にしています。
http://code.google.com/p/android-binding/wiki/BindingToCursors


テストについて

今回、リストビューの項目で使うアイコンとしてリソースを使用しています。
テストでアイコン用のDrawableがインスタンス化できなかったため、AndroidTestCaseを継承したテストとしました。結果として、エミュレータを使わない形でのテストにできませんでした。。。
エミュレータを使うとやはりテストの開始までに時間がかかります。ここは何かしらもう一工夫必要なので、引き続き考えてみないと駄目なようです。





0 件のコメント:

コメントを投稿