リストビュー(またはScrollView)内のスクロール位置を検出します
-
20-09-2019 - |
質問
私は、新しいイベントがX秒ごとにポーリングされているチャットルームアプリケーションを構築しています。起こるたびに、このコードは、新しいデータでRoomAdapter(ArrayAdapterのカスタムサブクラス)を更新し、一番下にそれをスクロールます:
RoomAdapter adapter = (RoomAdapter) getListAdapter();
for (int i=0; i<newEvents.size(); i++)
adapter.add(newEvents.get(i));
getListView().setSelection(events.size()-1);
これは、ユーザーが部屋の歴史を一瞥までスクロールしている場合はポーリングが発生したとき、下に彼女を飛び降りるために起こっていることを除いて、結構です。私は何をしたいのは、ユーザーがリストの一番下にすでにある場合、それは新しいイベントのために投票した後、そこに留まるようにそれを持っています。ユーザーの意図上向きにスクロールした場合、私は、ユーザー邪魔されないしたいと思います。
私はすでにリストビューの一番下までスクロールしていたとき、私は検出方法を教えてください。
注:私はgetListView()getSelectedItemPositionを()、行うことはできませんので、<のhref = "http://developer.android.com/reference/android/widget/ListView.html#setSelection%28int%29" relが=「nofollowをnoreferrer」>ドキュメントがタッチモードでは、実際に項目を選択していないときsetSelectionを呼び出し、に注意して、ちょうどそれにスクロールします。
解決
私はこれを試していないが、どのようにgetLastVisiblePosition()==getCount()-1
は? (ListView
のメソッド)
他のヒント
しかし、それは正しい方法ではありません。
使用します
•android:transcriptMode
- リストの行動内容が
を変更
- 「無効」、
スクロールしません
- 「ノーマル」、最後の項目が表示
であれば下にスクロールします
- 「alwaysScrollは」、常に一番下までスクロールし
•android:stackFromBottom
- 逆の順序でスタック項目
- アダプタ
からの最後の項目で始まります
チャットのための•便利な
- メッセージング、トーク、IRCなど