質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

4424閲覧

Android ListView 一番下判定をしたい

shotakeu

総合スコア386

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/08/18 07:05

AndroidのListViewで一番下に到達したらデータ読み込ませる処理をしたいのですが、以下のように書くと一番下のカラムが表示されてる限り何度もデータを取得しにいってしまいます。

Java

1 //(中略) 2 @Override 3 public void onScrollStateChanged(AbsListView view, int scrollState) { 4 } 5 // fixme 6 // 追加読込をしたいが一番下のカラムが表示されてる限り何度もデータ取得にいってしまう・・・ 7 @Override 8 public void onScroll(AbsListView view, int firstVisibleItem, 9 int visibleItemCount, int totalItemCount) { 10 // 最後までスクロールされたかどうかの判定 11 if (totalItemCount != 0 && totalItemCount == firstVisibleItem + visibleItemCount ) { 12 //追加のデータを読み込む処理 13 } 14 } 15

スクロールが完全にできなくなったタイミングで追加データを読み込ませたいのですが・・・その「完全にスクロールできなくなったタイミング」の判定が思いつきません。
スクロールが止まったタイミングでフラグを建てるなど試してみたのですが、うまくいかず。
他になにか方法がありましたらご教示ください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

java

1@Override 2 public void onScrollStateChanged(AbsListView view, int scrollState) { 3 } 4 // fixme 5 // 追加読込をしたいが実装できない・・・ 6 @Override 7 public void onScroll(AbsListView view, int firstVisibleItem, 8 int visibleItemCount, int totalItemCount) { 9 // 最後までスクロールされたかどうかの判定 10 if (totalItemCount != 0 && totalItemCount == firstVisibleItem + visibleItemCount ) { 11 Log.d("TEST","onScroll"); 12 if (!progressDialog.isShowing() && (mAdapter.getCount() % 200 == 0)){ 13 Log.d("TEST","getCount:"+mAdapter.getCount()); 14 if (mUserListFlg.equals("follow")){ 15 getFollowUser(); 16 } else { 17 getFollowerUser(); 18 } 19 20 } 21 }

progressDialogが表示されているかどうかの判定を入れることでデータを何回も読み込みに行ってしまうのを防ぐことができました。

投稿2015/08/20 09:24

shotakeu

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

BaseAdapterを使うことは可能でしょうか。
可能であれば下記の内容でできると思います。

1-BaseAdapterを継承したクラスを作成
2-BaseAdapter#getViewをオーバーライド
3-初期表示データを渡す
3-getViewの第1引数のpositionと表示データサイズを比較し、一致したら追加データ読み込み処理を実施

上記の方法で質問の内容は実装可能です。
ただし、下記の点に注意してください。
・BaseAdapter内の表示データを更新する箇所は排他制御が必要になるかもしれません。
・上記の方法はプルトゥーリフレッシュのようなイメージにはなりません。

ここからは質問の範囲外になります。
もしも、表示するデータがデータベースに入っている場合はCursorAdapterを使用することをお勧めします。

投稿2015/08/18 09:42

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shotakeu

2015/08/20 08:25

試してみましたがコードの構造上難しかったです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問