ListView滚动到选定的项目

问题描述:

我有一个带有编辑文本和下面的按钮的ListView。当我点击一个listView项时,键盘出现,并按下编辑文本和按钮。我想要列表滚动到选定的项目。任何想法?谢谢ListView滚动到选定的项目

+1

看到我的答案在这里,http://stackoverflow.com/a/29345217/1881527的[编程滚动到一个特定的位置在Android的ListView(HTTP – 2015-04-01 09:52:04

+2

可能重复://计算器。com/questions/7561353 /以编程方式滚动到一个特定位置在Android的列表视图) – 2016-08-18 18:46:27

在您点击的列表项上设置一个监听器,然后在单击时使用View.getTop()View.getBottom()以获取它在父代中的位置。然后,您可以使用ListView.scrollTo(x, y)滚动到列表项目。

+0

这不适合我。如果我实现你的例子,listView被滚动,但选中的项目不居中。 – Anita 2010-08-17 15:34:17

+1

@Anita:你没有提到任何关于居中的事情......居中只需要稍作修改。只需按照屏幕高度的比例添加或减少y值即可。 – Doge 2010-08-19 13:11:21

+0

不需要这样做。 – 2013-08-07 23:59:24

您可以使用ListView的setSelection(int position)方法滚动到一行。

+16

这不适合我。我在http://developer.android.com/reference/android/widget/ListView.html#smoothScrollToPosition(int)使用了smoothScrollToPostion(position)。重要说明:在适配器上调用notifyDataSetChanged()后,必须调用它。 – SilentNot 2013-10-02 19:41:22

+1

请注意,这一个将您带到了这个位置,但在另一个答案中,smoothScrollToPosition实际上在那里滚动。如果你想让用户看到某个东西,这两者都可以工作,所以这是你想要的样子。 – 2014-04-28 21:53:17

+0

如何在只有一个项目存在时使listview滚动顶部? – 2016-02-29 08:50:28

你应该使用transcript mode

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); 

您可以使用ListView的smoothScrollToPosition(int position)滚动到列表中的特定位置。

+1

由于此错误:https://code.google.com/p/android/issues/detail?id=36062,如果您想要平滑滚动,这实际上是一个更好的解决方法:http://stackoverflow.com/questions/ 14479078/smoothscrolltopositionfromtop-is-not-always-working-like-it-should/20997828#20997828 – nommer 2014-08-04 17:18:08

+0

如上所述,该错误似乎特定于smoothScrollToPositionFromTop。不确定它会影响smoothScrollToPosition ...有谁知道吗? – 2015-02-06 00:30:44

+1

不知道,但我的'smoothScrollToPosition()'似乎并不工作,而'setSelection()'工作;尽管有一个混蛋。 – Darpan 2015-09-22 12:24:34

哟可以寻找

listView.setSelectionFromTop(位置,distanceFromHeader);

它将定位在位置处的项目,下面列表视图

+0

我需要在滚动lisview的同时滚动另一个视图。使用列表视图上的setSelectionFromTop滚动阻止使另一个视图滚动变慢的UI线程。你能提出一些建议如何去做? – VijayRaj 2014-11-27 09:22:00

的顶部指定的像素对于直接滚动:

getListView().setSelection(11); 

对于平滑滚动:

getListView().smoothScrollToPosition(11); 

滚动到顶部

getListView().setSelectionAfterHeaderView(); 

注意

试图调用它的职位,因为有时当你调用它的方法

getListView().postDelayed(new Runnable() {   
    @Override 
    public void run() { 
     lst.setSelection(15); 
    } 
},100L); 

使用尚未创建列表视图持续时间带来更好的用户体验。使用这个,并添加持续时间。将项目顺利滚动到列表视图的顶部。

int duration = 500; //miliseconds 
int offset = 0;  //fromListTop 

listview.smoothScrollToPositionFromTop(position,offset,duration); 
  • descrease时间,使滚动更快

您可以使用

smoothScrollToPosition(position) 

只是增加项目的位置1,你会得到项目的看法。

getListView().smoothScrollToPosition(position + 1);