Update ListView(android)之后“刷新”和“setSelection”的更好方法

时间:2009-10-26 14:34:29

标签: android listview

在我的ListView中,我选择了一个项目来“添加收藏夹”,我必须做一些工作,我再次填充数据以刷新列表,然后我实现OnScrollListener使用{{1在项目中添加了列表显示权限。

有没有更好的方法呢?我的意思是像setSelection(firstVisibleItem)或类似的东西在Android API?或者任何建议的方式?

5 个答案:

答案 0 :(得分:5)

要显示所选项目,而不是在ListView的中间而不是在setSelectionFromTop()的顶部,我使用了getListView().setSelectionFromTop(pos, getListView().getHeight() / 2);

{{1}}

当然,您还可以从上面的分区中减去一半的单元格布局高度,以便在中间精确地选择。

答案 1 :(得分:1)

好吧,requery()是重新填充由ListView支持的SimpleCursorAdapter的首选方法。在setSelection()上调用ListView似乎是确保所需项目可见的好方法。我不清楚OnScrollListener与此有什么关系。

答案 2 :(得分:1)

如果您只是致电setSelection(),则会使您的商品以不自然显示。例如,如果您的项目在屏幕的“中间”可见,其位置为8.当您添加收藏夹刷新数据时,请设置选择项(8)将显示在屏幕的“顶部”(而不是“中间”)。

所以,这就是为什么我使用OnScrollListener获取firstVisibleItem并使用此值来设置位置的原因。它使项目自然显示。这是功能:

public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){}

我认为在ListView更新数据的任何人都会经常发生这种情况。我希望有人可以分享这个问题的经验。

答案 3 :(得分:1)

mListActivity.runOnUiThread(
    new Runnable() {
        public void run() {
            x.setSelection(x.getCount());
        } 
    } 
);

答案 4 :(得分:1)

这是你们所看到的:

onResume()
{
    refresh_your_data()
    if(listview.getadapter()==null)
     // create the adapter
    }
    else
    {
        adapter.notifydatasetchanged();
    }
}