我有一个带有ListView的片段,我希望ListView在保存和恢复片段时保持其滚动位置.通常这很简单,只需在保存时调用ListView.getFirstVisiblePosition(),并在恢复时调用ListView.setSelection()(ListView.setSelectionFromTop(),如果你想获得幻想).
但是,我正在使用加载器,并且在活动开始时我的ListView没有完全填充.如果我在onActivityCreated()期间设置setSelection(),则列表将无法滚动到任何内容,并且将忽略该调用.
我现在通过在将来的某个时间发布滚动来解决这个问题,但这绝对不是理想的.我希望它能在数据完成加载时向右滚动.我差不多这样做了,但是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);
}
}
Run Code Online (Sandbox Code Playgroud)
当ListView完成数据填充时,您知道有什么方法可以直接滚动ListView吗?
试试这个:
listView.post(new Runnable() {
@Override
public void run() {
listView.setSelection(savedScrollPosition);
savedScrollPosition = null;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |