6

我有一个包含绑定到光标适配器的 ListView 的视图。当光标内容更改时,我想将 ListView 保持在顶部,然后在我的自定义光标适配器中添加:

@Override
protected void onContentChanged() {
    // ...
    myListView.scrollTo(0, 0);
}

但这不起作用。然后我在某处读到这个动作,如下所示:

myListView.post(new Runnable() {
    public void run() {
        myListView.scrollTo(0, 0);
    }
});

但这也不起作用。

当 ListView 的内容发生变化时,如何将其保持在顶部?

编辑:

只是为了尝试,我添加了一个按钮并在其 onClickListener 中调用了 scrollTo() ,但它不起作用!我错过了什么?

4

3 回答 3

29

而不是scrollTo,尝试setSelection(0)以到达列表视图的顶部位置。

于 2012-09-19T09:27:31.080 回答
7

我制作了对其他人有用的列表视图滚动功能,它们适用于每个 android 版本、模拟器和设备,这里的 itemheight 是列表视图中视图的固定高度。

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;
}
于 2012-11-16T02:59:58.447 回答
6

ListView'sscrollTo适用于ListView它自己作为View

setSelection(0)成功了,因为它适用于列表视图的适配器

于 2012-09-19T09:29:04.393 回答