后更新“刷新”和“setSelection”的方法在我的ListView
中,我选择一个项目以“添加收藏夹”,我必须做一些东西的工作,我再次填充数据刷新列表,然后我执行OnScrollListener
使用setSelection(firstVisibleItem)
来设置列表显示右项上添加。在更新ListView(Android)
有没有更好的方法来做到这一点。我的意思是像mCursor.requery()
或类似的android APIs?或者任何建议的方式?
后更新“刷新”和“setSelection”的方法在我的ListView
中,我选择一个项目以“添加收藏夹”,我必须做一些东西的工作,我再次填充数据刷新列表,然后我执行OnScrollListener
使用setSelection(firstVisibleItem)
来设置列表显示右项上添加。在更新ListView(Android)
有没有更好的方法来做到这一点。我的意思是像mCursor.requery()
或类似的android APIs?或者任何建议的方式?
嗯,requery()
是重新填充由SimpleCursorAdapter
支持的ListView
的首选方法。在ListView
上调用setSelection()
似乎是确保所需项目可见的好方法。我不清楚OnScrollListener
与这些有什么关系。
我也必须考虑OnScrollListener! :-) 但我猜**这里的含义是,通过使用此侦听器并记住通过'firstVisibleItem'来的最后一个值,并在重新定位时使用** this **值,更新数据后所有内容看起来都一样! – Zordid 2010-02-25 12:48:18
如果你只是打电话setSelection()
,这将使你的项目显示不自然地。例如,如果您的项目在屏幕的“中间”处可见并且其位置是8.当您添加收藏夹,刷新数据,setSelection(8)项目将显示在屏幕的“顶部”(而是在'中间')。
所以,那为什么我用OnScrollListener
得到firstVisibleItem
并且用这个值来设置位置。它使项目自然显示。这是函数:
public void onScroll(AbsListView view, int firstVisibleItem, int VisibleItemCount, int totalItemCount){}
我认为它与任何人谁在ListView
更新数据经常发生。我希望有人能分享这个问题的经验。
mListActivity.runOnUiThread(
new Runnable() {
public void run() {
x.setSelection(x.getCount());
}
}
);
要显示所选择的项目,而在中间比在我ListView
顶部,我用setSelectionFromTop()
:
getListView().setSelectionFromTop(pos, getListView().getHeight()/2);
当然,你可以额外减去一半的单元布局的高度,从分割上面来正确地选择中间的选择。
将高度除以2不会使项目居中,而是将项目的顶部开始放到一半,从而给出将项目放在列表中的感觉。我通常减去半行高度,或者如果视图高度很难建立,则除以2.5或3。 – Lmickos 2013-12-05 10:19:11
这是大家都在找什么:
onResume()
{
refresh_your_data()
if(listview.getadapter()==null)
// create the adapter
}
else
{
adapter.notifydatasetchanged();
}
}
我感兴趣的是这个问题的答案;我也有类似的问题 – I82Much 2009-10-26 15:12:46