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);
これは問題ありませんが、ユーザーが上にスクロールして部屋の履歴を確認している場合、投票が行われるときにユーザーが一番下にジャンプします。私がやりたいのは、ユーザーがすでにリストの一番下にいる場合、新しいイベントのポーリング後もそこにとどまるようにすることです。ユーザーが意図的に上にスクロールした場合は、邪魔されないようにしたいと思います。
ListViewの一番下までスクロールしたことを検出するにはどうすればよいですか?
注:getListView()。getSelectedItemPosition()を実行することはできません。これは、ドキュメントに記載されているように、タッチモードでsetSelectionを呼び出しても実際にはアイテムが選択されず、スクロールするだけだからです。