2010年8月27日金曜日

Android 「The world of ListView」 - Headers and footers -

Google I/O の 「The world of ListView」というセッションを見たので
そのまとめ。

長いので、項目ごとに分けました。
今回は 「Headers and footers」

--------------------------------------

Google I/O の「The world of ListView」のページは こちら

セッションのスライドはこちら

 agenda

  • Virtualization and adapters

  • Item properties

  • Headers and footers

  • List selectors

  • Other features

  • Gotchas and don'ts


--------------------------------------

Headers and footers



 * Fixed

   fixed header/footer は簡単。次のように
   LinearLayout でOK


<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<!-- ... -->

</LinearLayout>

<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1.0" />

</LinearLayout>



 * Scrolling

  一緒にスクロールする header/footer はメソッドが用意されている
  twitter の reload / more load みたいなやつ。

  • ListView.addHeaderView()
  • ListView.addFooterView()
  • setAdapter() の前に呼ばなければならない
  • isSelectable == Adapter.isEnabled()
    – Sorry, our bad(混乱する名前にしちゃってごめんね。。。)

  addHeaderView() と addFooterView() は isSelectable という
  パラメータを保持している。
  これは、使われている final adapter が items が有効になっている
  リストに report back するかどうかに対応する。
  「ちょっと混乱する名前だね」って言ってた。

  (This corresponds to whether or not the final adapter
   being used will report back to the list that these
   items are enabled.)

 * Wrapped adapter

  ListView では、内部的に別の adapter の中に your adapter を
  wrapping することで、scrolling header / footer を実現している。
  そのため、最初の最後の要素(item)では、異なるタイプの view を返す。
  よって、setAdapter で渡した adapter と getAdapter
  で返ってくる adapter は異なる。ちょっと注意が必要。


ListView list = ...;
list.addHeaderView(myHeader);
list.addFooterView(myFooter);
list.setAdapter(myAdapter);

boolean same = list.getAdapter() == myAdapter;
// same == false!
// getAdapter() returns a
// android.widget.HeaderViewListAdapter

1 件のコメント:

  1. // same == false!
    // getAdapter() returns a
    // android.widget.HeaderViewListAdapter
    はそういう意味だったのですね!ありがとうございます。

    返信削除