2

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を呼び出しても実際にはアイテムが選択されず、スクロールするだけだからです。

4

2 に答える 2

6

私はこれを試していませんが、どうgetLastVisiblePosition()==getCount()-1ですか?(のメソッドListView

于 2009-10-10T23:33:56.613 に答える
5

しかし、それは適切な方法ではありません。
使用
android:transcriptMode
–コンテンツが変更されたときのリストの動作
–「無効」、スクロールしない
–「通常」、最後のアイテムが表示されている場合は下にスクロール
–「alwaysScroll」、常に下にスクロール
android:stackFromBottom
–アイテムを逆にスタックする注文
–アダプタの最後のアイテムから開始し
ます•チャットに役立ちます
–メッセージング、トーク、IRCなど。

于 2012-09-06T12:19:28.510 に答える