AndroidMarketアプリやYouTubeアプリ、Gmailアプリなどでは
ListViewを最後までスクロールすると自動的に次の数件を取得し表示される。
android.widget.AbsListView.OnScrollListener#onScrollを利用すると
表示されている先頭のインデックス(firstVisibleItem)、
表示されているリストの数(visibleItemCount)、リストのトータル数(totalItemCount)
が引数として渡ってくるので、firstVisibleItem + visibleItemCount = totalItemCount
になる時、最後までスクロールされたと判定出来る。
上図で赤枠部分が画面に表示されている部分になる。
最後までスクロールしている右図でfirstVisibleItem + visibleItemCount = totalItemCount
になっていることがわかる。
下記がソースの一部。
- ListView listView = (ListView) findViewById(android.R.id.list);
- listView.setOnScrollListener(new OnScrollListener() {
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- // 最後までスクロールされたかどうかの判定
- if (totalItemCount == firstVisibleItem + visibleItemCount) {
- // ここに次の数件を取得して表示する処理を書けばいい
- }
- }
- });
リストの追加などでListViewを更新する際、スクロール位置が毎回戻ってしまっては
ユーザービリティの悪いものになってしまう。
ListViewのスクロール位置の取得と設定は下記のようにして実現出来る。
取得
- int position = listView.getFirstVisiblePosition();
- int y = listView.getChildAt(0).getTop();
設定
- listView.setSelectionFromTop(position, y);
インターネット上からデータを取得する際に使用する頻度が多いかも。
0 件のコメント:
コメントを投稿