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()を利用する。ひとまずこんなところ。