刺身の上にたんぽぽ乗せる日記

プログラミングしたり、自販機の下に落ちてる小銭を集めたりしてます

Android開発メモ

最近apiドキュメントを見て、いくつかのadapterがFilterableを実装していて、ListViewにもsetFilterTextなるものがあることに気付いたので、今まで自力で実装していたfilterをandroid風に変えてみた。

http://developer.android.com/reference/android/widget/AbsListView.html#setFilterText%28java.lang.String%29

最初はWrapperListAdapterでAdapterのラッパーを書いていたんだけど、
http://developer.android.com/reference/android/widget/WrapperListAdapter.html
何故かWrapperListAdapterとSectionIndexerを継承したフィルタが、fast scroll時にCastのExceptionで死ぬので、しょうがなくBaseAdapterベースで抽象フィルタクラスを書いた。
intの配列作って、フィルタを通ったn番目のitemは実Adapterのm番目のitemという対応表を持っているだけの割と汎用的に使える*1感じ。
あと、フィルタがデフォルトだとforward matchingなので、Filterを自分で実装した。matching処理自体はリストの要素依存なので、template methodにしておいた。

ちなみに、レスの>>50-100の表示の処理もAdapterのWrapperで処理してる。
レス表示は、キーワードフィルタ -> レス表示範囲フィルタ -> 実際のデータ、という三重構造になってる。

で、使ってみた感想。

  • 体感速度が良くなった気がする
    • これはとても重要。
    • フィルタ処理がasyncだから?関係あるの?
  • できれば検索ボタンを押した時にポップアップを出して、「フィルタできるよ!」というのを明示的に示したいんだけど、変なハックをしないとできないっぽい
    • しょうがないからハックで解決するか...。

今更気付いたけど、スクロールで勢い良く飛ばして慣性で流れてる時に、指で止めるには、mouse down*2で止まるんじゃなくて、mouse upで止まるのね。BB2Cと2tchともmouse downだよなぁ。うーん。

BB2Cも2tchもスクロールがスムーズなんだけど、どうやったら同じくらいスムーズに動くのかなぁ?

追記:
mouse upで止まるのは、多分long clickの設定したからだ...

*1:少なくともレス表示とボード一覧には両方とも使えた

*2:mouseじゃないけど