我有一个asynctask,在doInBackground里面,我没有for / while循环。相反,我有一个不同的类,该类使用for循环生成一个列表。那么如何使用onProgressUpdate更新UI?
这是:
@Override
protected List<MyObject> doInBackground(Void... voids) {
IAppLogic appLogic = new AppLogic(mContext);
List<MyObject> list = appLogic.getApps(ALL_APPS);
return list;
}
MyObject是一个自定义对象,IAppLogic是获取已安装应用程序的类的接口。
答案 0 :(得分:0)
您可以通过为import { GoogleSignin } from 'react-native-google-signin';
- 方法提供callback参数来实现此目的。伪代码:
getApps()
简单地说:每当您找到某些内容时,您的代码会通知调用方interface AppFoundCallback {
public onAppFound(App app, int progress);
}
// in AppLogic.getApps:
public getApps(String filter, AppFoundCallback callback)
for (int i = 0; i < listOfApps.length; i++) {
// Do the work you need to do here.
int progress = (i / listOfApps.length) * 100;
callback.onAppFound(app, progress);
}
}
// in your Task:
class Task extends AsyncTask implements AppFoundCallback {
// Implement the callback
@Override
onAppFound(App app, int progress) {
this.publishProgress(progress);
}
// Setup and register the listener
@Override
protected void doInBackground() {
// Ohter stuff
List<MyObject> list = appLogic.getApps(ALL_APPS, this);
}
// Render progress updates on the UI
@Override
protected void onProgressUpdate(Integer... progress) {
progressView.setProgress(progress[0]);
}
}
- 方法。然后将其作为进度更新发布。 getApps()
- 方法是AsyncTask的一部分,它将负责在UI-Thread上调用publishProgress()
,以便您只需更新视图。