滚动ListView到光标加载后的位置
问题描述:
我有一个带有ListView的片段,我希望ListView在保存和恢复片段时保持其滚动位置。通常这很简单,只需在保存时调用ListView.getFirstVisiblePosition()并在恢复时调用ListView.setSelection()(ListView.setSelectionFromTop()(如果您想要)。滚动ListView到光标加载后的位置
但是,我正在使用加载程序,并且当活动启动时,我的ListView未完全填充。如果我在onActivityCreated()期间设置了Selection(),那么该列表将不会有任何内容滚动至此,并且该调用将被忽略。
我现在通过在将来某个时间发布滚动来解决这个问题,但是这绝对不是理想的。我更喜欢它在数据加载完成后向右滚动。我几乎在这里做,但swapCursor()不刷新,它只是为未来安排失效。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
if (savedScrollPosition != null) {
Log.d(TAG, "loaded and scrolling to " + savedScrollPosition);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
list.setSelection(savedScrollPosition);
savedScrollPosition = null;
}
}, 100);
}
}
你知道任何滚动ListView的权利,因为ListView完成填充数据吗?
答
试试这个:
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(savedScrollPosition);
savedScrollPosition = null;
}
});
工作就像一个魅力。谢谢! – num1
很高兴为你效劳:) – Shafi
你在哪里添加了这段代码?你能否再解释一下 - 我不确定我理解这里发生了什么。 – RightHandedMonkey