CursorLoaderのロード後にListViewの選択行を変更

ListViewでadapterにSimpleCursorAdapterとCursorLoaderを使用している状況では、onLoadFinishedメソッドの中でadapter.swapCursor(cursor)を呼び出してListViewの中身を更新すると思います。
この時swapCursorの後にListViewの選択行を変更するには、以下のようにします。

adapter.swapCursor(cursor)
listView.post(new Runnable {
def run() {
val pos = 0 // 選択する行
// listView.setItemChecked(pos, true) //singleChoiceの時はこれも呼ぶ
listView.setSelection(pos)
listView.performItemClick(listView.getChildAt(pos), pos, 0)
}
}

ポイントはswapCursorの後に直接listView.setSelectoin(pos)を呼ばずに、postメソッドを呼んでRunnable経由でsetSelectionを呼び出す点です。

なぜならデバッガで追うと分かりますが、swapCursorの時点ではまだListViewの描画が終わっていないため、setSelectionなどを呼んでも効果がないからです。

上記のようにするとListViewの描画後にrun()メソッドの中身が実行され、ListViewの選択行が正しく変更されます。