在我的ListView
中,我选择了一个项目来“添加收藏夹”,我必须做一些工作,我再次填充数据以刷新列表,然后我实现OnScrollListener
使用{{1在项目中添加了列表显示权限。
有没有更好的方法呢?我的意思是像setSelection(firstVisibleItem)
或类似的东西在Android API?或者任何建议的方式?
答案 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();
}
}