我有一个视图,其中包含一个绑定到游标适配器的ListView。当光标内容发生变化时,我想将ListView保持在顶部,然后在我的自定义光标适配器中添加:
@Override
protected void onContentChanged() {
// ...
myListView.scrollTo(0, 0);
}
但这不起作用。然后我在某个地方阅读这个动作的排队:
myListView.post(new Runnable() {
public void run() {
myListView.scrollTo(0, 0);
}
});
但这也不起作用。
当内容发生变化时,如何将ListView保持在顶部?
编辑:
只是为了尝试,我添加了一个按钮,并在其onClickListener中调用了scrollTo(),它不起作用!我错过了什么?
答案 0 :(得分:29)
取代 scrollTo ,尝试 setSelection(0)以到达列表视图的顶部位置。
答案 1 :(得分:7)
我制作了可能对其他人有用的列表视图滚动功能,它们适用于我的每个Android版本,模拟器和设备,这里itemheight是listview中固定的视图高度。
int itemheight=60;
public void scrollToY(int position)
{
int item=(int)Math.floor(position/itemheight);
int scroll=(int) ((item*itemheight)-position);
this.setSelectionFromTop(item, scroll);// Important
}
public void scrollByY(int position)
{
position+=getListScrollY();
int item=(int)Math.floor(position/itemheight);
int scroll=(int) ((item*itemheight)-position);
this.setSelectionFromTop(item, scroll);// Important
}
public int getListScrollY()
{
try{
//int tempscroll=this.getFirstVisiblePosition()*itemheight;// Important
View v=this.getChildAt(0);
int tempscroll=(this.getFirstVisiblePosition()*itemheight)-v.getTop();// Important
return tempscroll;
}catch(Exception e){}
return 0;
}
答案 2 :(得分:6)
ListView的scrollTo
适用于ListView
自View
setSelection(0)
可以解决问题,因为它适用于listview的适配器