TweetDeckの代わり作成メモ1 ListVIew

色々と迷走してきたので、AltDeck作成時のメモを忘れないうちにつけておく・・・。


最初はListViewで使ったところ、はまったところなど
実行環境はAndroid2.2 , 開発環境はMac上。


異なるレイアウトの要素を挿入

よくあるListViewのサンプルだと、一度作成した要素を使い回して描画している。
そのため、異なるレイアウトの要素を挿入しようとするのが面倒。


実際に異なるレイアウトの要素を含ませる方法としては、AdapterのgetView()において以下のどちらかを行うことになる。


1.毎回レイアウトの中身を消して再生成
2.レイアウト毎のビューを1つのレイアウトに設置して、表示・非表示で切り替え
どちらも正直芋臭いけど、1は目に見えて重くなるので、まだ2の方がマシ。



TextView body1 = (TextView)activity.findViewById(R.id.textview1);
TextView body2 = (TextView)activity.findViewById(R.id.textview2);

body.setVisibility(View.VISIBLE);//表示body.setVisibility(View.INVISIBLE);//非表示


芋い・・・なんかスマートなやり方ないものかな(´・ω・`)


ヘッダ・フッタの作成

ListViewでヘッダフッタを用いたい場合は、”setAdapter()より前で”addHeader(),addFooter()を使う。

ListView生成からAdapter設定までの順序は以下のようになる。


1.ListViewの生成
2.Adapterの生成
3.Header用ビューの生成とListViewへの追加
4.Footer用ビューの生成とListViewへの追加
5.AdapterをListViewにセット


自動スクロール

プログラム側でスクロールを制御する方法。
一瞬で動かすならListView#scrollTo(),ListView#setSelection()
スムーズに動かすならsmoothScrollToPosition()
scrollTo(),smoothScrollTo()は現在位置が端(最上段、最下段)だと動作しない問題がある。setSelection()なら端でも機能する。


利用出来るListViewのメソッド

メソッド名 移動アニメーション 端で動作
setSelection() 無し する
scrollTo() 無し しない
smoothScrollTo() 有り しない


現在位置の取得に使う物
画面最上段の要素のインデックス、もしくは画面最下段の要素のインデックスが取得可能。
・getFirstVisiblePosition()
・getLastVisiblePosition()


移動先の指定
getFirstVisiblePosition()を基準にして行う(現在のgetFirstVisiblePosition()が4で、3アイテム分スクロールしたければsmoothScrollToPosition(7)とする(実は若干ずれている感がある・・・要素ごとのサイズ差によるものだと思いたい)。


アイテムのクリックを取得する場合

setOnItemClickListenerで取得。
名前にItemがついてないものは、ListView内の要素ではなくListView自体に対する操作に反応する。


意味なさそうなの

・getScrollX(),getScrollY()

まるで動く気配がない、何か間違ってるのかな・・・?


要素の更新

ListViewに更新を促す場合は、AdapterのnotifyDatasetChanged()を利用する。

参考
ListViewの更新を促すとき


ひとまずこんなところ。