android ListView:scrollTo不起作用

时间:2012-09-19 09:23:18

标签: android android-listview cursor simplecursoradapter

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

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

但这不起作用。然后我在某个地方阅读这个动作的排队:

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

但这也不起作用。

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

编辑:

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

3 个答案:

答案 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适用于ListViewView

setSelection(0)可以解决问题,因为它适用于listview的适配器