Android CursorLoader - onLoadFinished not called

先前為了不影響UI Thread的執行,等到程式都Ready時,才執行CursorLoader的初始化。

執行程式時都很正常也能收到onLoadFinished callback event,但旋轉屏幕時卻無法再次收到onLoadFinished callback event。

按照網路所使用的方式,先destroyLoader在restartLoader也是無法收到event。

MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
private static final int LOADER_UI_EVENT = 1;

private void loadEvent() {
LoaderManager loaderManager = getLoaderManager();
Loader eventLoader = loaderManager.getLoader(LOADER_UI_EVENT);

if (null != eventLoader) {
loaderManager.destroyLoader(LOADER_UI_EVENT);
loaderManager.restartLoader(LOADER_UI_EVENT, null, this);
} else {
loaderManager.initLoader(LOADER_UI_EVENT, null, this);
}
}

重新看了Android 官方文件後,CursorLoader初始化必須在Activity onCreate時,才會收到onLoadFinished callback event。

將程式修改為onCreate先初始化Loader,旋轉屏幕時也能收到event了,之後如果要重新讀取Loader再呼叫loadEvent 函式即可。

MainActivity.java
1
2
3
4
5
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().initLoader(LOADER_UI_EVENT, null, this);
}
作者

Nick Lin

發表於

2019-05-16

更新於

2023-01-18

許可協議


評論