【发布时间】:2010-08-17 13:50:40
【问题描述】:
我有一个带有编辑文本和下方按钮的 ListView。当我单击 listView 项目时,键盘会出现并向上推编辑文本和按钮。我希望列表滚动到所选项目。任何想法?谢谢
【问题讨论】:
-
在这里查看我的答案,stackoverflow.com/a/29345217/1881527
标签: android
我有一个带有编辑文本和下方按钮的 ListView。当我单击 listView 项目时,键盘会出现并向上推编辑文本和按钮。我希望列表滚动到所选项目。任何想法?谢谢
【问题讨论】:
标签: android
您可以使用 ListView 的setSelection(int position) 方法滚动到一行。
【讨论】:
您可以使用 ListView 的 smoothScrollToPosition(int position) 滚动到列表中的特定位置。
【讨论】:
smoothScrollToPosition() 似乎不起作用,而 'setSelection()' 起作用;虽然有点混蛋。
直接滚动:
getListView().setSelection(11);
为了平滑滚动:
getListView().smoothScrollToPosition(11);
滚动到顶部
getListView().setSelectionAfterHeaderView();
注意
尝试在 post 中调用它,因为有时在调用它的方法时尚未创建列表视图
getListView().postDelayed(new Runnable() {
@Override
public void run() {
lst.setSelection(15);
}
},100L);
【讨论】:
你应该使用transcript mode:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
【讨论】:
在被点击的列表项上设置一个监听器,然后在点击时使用View.getTop() 或View.getBottom() 来获取它在父项中的位置。然后您可以使用ListView.scrollTo(x, y) 滚动到列表项。
【讨论】:
你可以找找
listView.setSelectionFromTop(position, distanceFromHeader);
它将Item定位在listview顶部下方的指定像素位置
【讨论】:
你可以使用
smoothScrollToPosition(position)
只要把item的位置加1,就可以看到item的view了。
getListView().smoothScrollToPosition(position + 1);
【讨论】:
使用持续时间可以提供更好的用户体验。使用它,并添加持续时间。将项目顺利滚动到列表视图的顶部。
int duration = 500; //miliseconds
int offset = 0; //fromListTop
listview.smoothScrollToPositionFromTop(position,offset,duration);
【讨论】: