listfragmentのcursoradapterで発生している特有の問題。
onLoadFinishedで、リストビューを前の位置にスクロールする(そしてそのアイテムを強調表示する)ために、前に選択したアイテムを選択します。
これは、スクロール部分を除いて、見事に機能します。
投稿を1つだけ使用して遅延させると(たとえば5秒でも)、アイテムは選択されますが、リストはスクロールしません(選択したアイテムは現時点では表示されない可能性があります) 。遅延の有無にかかわらず、1つの投稿だけで同じ動作をします。
選択したアイテムが表示されるようにリストビューをスクロールするには、setSelectionAGAINを投稿する必要があります。
最初または2番目のスクロール投稿をどれだけ遅らせるかは関係ありません。
これが私の厄介な回避策ですが、私はそれに満足していません。何か案は?
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
getListView().post(new Runnable() {
@Override
public void run() {
getListView().requestFocusFromTouch();
getListView().setSelection(selectedposition);
getListView().performItemClick(getListView().getAdapter().getView(selectedposition, null, null), selectedposition, selectedid);
getListView().clearFocus();
}
});
getListView().postDelayed(new Runnable() {
@Override
public void run() {
getListView().requestFocusFromTouch();
getListView().setSelection(selectedposition);
getListView().performItemClick(getListView().getAdapter().getView(selectedposition, null, null), selectedposition, selectedid);
getListView().clearFocus();
}
}, 500);
}