在我使用 listAdapter 更新列表视图后,我想确保列表一直滚动到底部,以便显示列表中输入的最后一个元素。我怎样才能做到这一点 ?
我试过这个但没有运气:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
谢谢你
假设您知道列表数据何时更改,您可以通过将列表选择设置为最后一行来手动告诉列表滚动到底部。就像是:
private void scrollMyListViewToBottom() {
myListView.post(new Runnable() {
@Override
public void run() {
// Select the last row so it will scroll into view...
myListView.setSelection(myListAdapter.getCount() - 1);
}
});
}
您需要在列表视图中使用这些参数:
滚动 lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
将列表的头部设置为底部 lv.setStackFromBottom(true);
您还可以在 XML 中设置这些参数,例如。像这样:
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
TRANSCRIPT_MODE_ALWAYS_SCROLL 和 setSelection 的组合使它对我有用
ChatAdapter adapter = new ChatAdapter(this);
ListView lv = (ListView) findViewById(R.id.chatList);
lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setAdapter(adapter);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
lv.setSelection(adapter.getCount() - 1);
}
});
我已经成功使用它来响应按钮单击,所以我想您在更新内容后也可以使用它:
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
要在 ListFragment 中获取此信息:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
getListView().setStackFromBottom(true);`
添加了这个答案,因为如果有人用谷歌搜索 ListFragment 的相同问题,他只会发现这个..
问候
使用:将列表的头部设置为底部 lv.setStackFromBottom(true);
为我工作,当它第一次出现时,列表会自动滚动到底部。然后列表会随着 TRANSCRIPT_MODE_ALWAYS_SCROLL
滚动。
我用
setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
在底部添加条目,旧条目从顶部滚动,就像聊天记录一样
getListView().smoothScrollToPosition(getListAdapter.getCount() - 1);
以在活动开始时滚动到底部。
最简单的解决方案是:
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(true);
转录模式是您想要的,由 Google Talk 和 SMS/MMS 应用程序使用。添加项目时,您是否正确调用适配器上的 notifyDatasetChanged()?