我目前正在寻找使用装载程序管理器在drawerlayout中填充我的expandablelistview。如果回调函数onLoadFinished()在UI线程或后台线程上运行,我在文档中找不到任何地方。它是在后台线程吗?
答案 0 :(得分:6)
如果您从UI线程调用init()
,则肯定会在UI线程上调用onLoadFinished()
。如果您从后台调用例如AsyncTaskLoader
,那么将通知结果的线程将是您初始化加载器的线程。
......但你仍然可以做到以下几点:
@Override
public void onLoadFinished(Loader<String> arg0, String arg1) {
Runnable populate = new Runnable(){
@Override
public void run() {
//your code
}
};
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
//on Ui thread
populate.run();
}else{
this.runOnUiThread(populate); //or use handler to run the runnable
}
}
:)
答案 1 :(得分:2)
http://www.amazon.com/Android-Programming-Ranch-Guide-Guides/dp/0321804333,pg。 566.
“一旦数据在后台加载,将在主线程上调用onFinishedLoad()方法。”
答案 2 :(得分:0)
下面添加代码将解决在onLoadFinished()中调用getView()返回NullPointerException的问题
@Override
public void onStop() {
super.onStop();
getSupportLoaderManager().destroyLoader(LOADER_ID);
}