【Android】ListViewで最終行までスクロールしたことを判定する
ListViewにデータの一部を表示し、最終行までスクロールした際に追加で読み込み処理を入れたいときに判定するためのロジックです。
以前作成した ListViewアプリケーション がありますので、これを使って最終行までスクロールしたときに処理を入れてみたいと思います。
https://www.s-watanabe.work/2020/12/androidcheckbox.html実装
方法としてはsetOnScrollListenerのonScrollメソッド内で引数の値を確認して判定します。onScrollメソッドの引数は以下です。
- AbsListView absListView - スクロール中のView (今回は使用しない)
- int firstVisibleItem - 先頭のindex
- int visibleItemCount - 見えている件数
- int totalItemCount - ListViewのItem総件数
※公式ドキュメントは以下です。
https://developer.android.com/reference/android/widget/AbsListView.OnScrollListener#public-methods_1onScrollメソッドで最終行まで到達したことを判定する
// メンバー変数
Boolean isLastLine = false;
(省略)
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
//
}
@Override
public void onScroll(AbsListView absListView,
int firstVisibleItem,
int visibleItemCount,
int totalItemCount) {
if (isLastLine) {
isLastLine = (totalItemCount == firstVisibleItem + visibleItemCount);
} else {
isLastLine = (totalItemCount == firstVisibleItem + visibleItemCount);
if (isLastLine) {
Toast.makeText(MainActivity.this, "最終行", Toast.LENGTH_SHORT).show();
}
}
}
});
ListViewに表示されている先頭のItemと現在表示中のItem数を足したものが、ListViewの総件数と一致することで最終行であることを判定しています。
また、onScrollはスクロール中何度も呼ばれるので、最終行にいる間は呼ばれないようにメンバー変数isLastLineで制御しています。
動作確認
ソースコードの全体は以下です。
https://github.com/s-watanabe-apps/listview-test/blob/master/app/src/main/java/com/swapps/listviewtest/MainActivity.java
コメント
コメントを投稿