Android 更新列表后,Listview滚动至列表末尾
我希望在使用listAdapter更新listview之后,确保列表一直滚动到底,以便它显示列表中输入的最后一个元素。我该怎么做 我试过了,但没有成功:Android 更新列表后,Listview滚动至列表末尾,android,listview,scroll,Android,Listview,Scroll,我希望在使用listAdapter更新listview之后,确保列表一直滚动到底,以便它显示列表中输入的最后一个元素。我该怎么做 我试过了,但没有成功: lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 谢谢你抄本模式是你想要的,Google Talk和SMS/MMS应用程序使用它。添加项目时是否正确调用适配器上的notifyDatasetChanged()?您需要在列表视图中使用以下参数: 卷轴 lv.setTran
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
谢谢你抄本模式是你想要的,Google Talk和SMS/MMS应用程序使用它。添加项目时是否正确调用适配器上的notifyDatasetChanged()?您需要在列表视图中使用以下参数:
- 卷轴
lv.setTranscriptMode(ListView.TRANSCRIPT\u MODE\u ALWAYS\u SCROLL)代码>
- 将列表的开头置于底部
lv.setstackfromtombottom(真)代码>
<ListView
...
android:transcriptMode="alwaysScroll"
android:stackFromBottom="true" />
使用:
将列表的标题设置为底部lv.setStackFromBottom(true)代码>
为我工作,列表在第一次显示时自动滚动到底部。然后,列表按其应有的方式滚动,使用TRANSCRIPT\u MODE\u ALWAYS\u 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);
}
});
}
成绩单模式总是滚动和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的相同问题,他会发现这一点
关于最简单的解决方案是:
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(true);
是的,我是。列表将正确更新,但始终从顶部开始。我只需要它来添加新项目,并始终滚动到列表的末尾。短信应用程序实际上禁用了成绩单模式。我记不清确切的原因了。请注意,使用这种方法,行在添加时会“从视图的底部堆叠”。这意味着短列表将在视图的顶部而不是底部有“空”空间。请注意,使用这种方法,行在添加时会“从底部堆叠”。这意味着短列表将在视图的顶部而不是底部有“空”空间,这并不总是人们想要的。快速提问:有没有办法让滚动动画化?因为当前当我notifyDataSetChanged()时,它会跳转而没有动画@Georg您是否在设备的开发者选项中禁用了动画?@Bhupendra这不是必需的。您也可以不使用线程,如瓦廷的回答所示。@Bhupendra setSelection()更新用户界面。通过在视图上调用post(Runnable),可以确保Runnable代码在android UI线程上运行。通常这样做,除非你知道你已经在UI线程上,在新设置的适配器上使用post会导致滚动动画,同时确保处于主线程中,并且在设置适配器后立即使用setSelection不会导致滚动animation@SaifHamed正如梅森·李对凯文的回答所评论的那样,这也导致短名单“空”视图顶部的空格而不是底部的空格,这很可能不是预期的行为。您也可以使用myListView.smoothScrollToPosition(myListAdapter.getCount()-1);为了实现平滑滚动,它可以工作…messagesListView.setTranscriptMode(ListView.TRANSCRIPT\u MODE\u NORMAL);messagesListView.setStackFromBottom(true);lv.setTranscriptMode(ListView.TRANSCRIPT\u MODE\u ALWAYS\u SCROLL)仅确保调用adapter.notifyDataSetChanged后将向下滚动ListView。如果这不起作用,请尝试用xml定义此属性,如下面的文章所示。调用getListView().smoothScrollToPosition(getListAdapter.getCount()-1)在onstart中的code>可在活动开始时滚动到底部。这是一个很好的解决方案。简单,一行。
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(true);