我需要一些帮助来管理片段和asynctask,我在google和stackoverflow中搜索了很多但是我没有得到积极的结果。
我有一个带有TabsActivity和三个标签(片段)的应用。其中一个是谷歌地图。我试图通过get调用更新地图中的标记来抛出自定义请求类。
问题是我想从postexecute方法调用片段映射类中的函数。我在asyntask中有上下文,我也尝试将片段作为参数传递,但我甚至不知道如何调用该函数。 Asynctask类是一个文件(它不在片段类中)。
任何帮助都会被贬低。
问候。
P.D - 抱歉我的英语不好:))
答案 0 :(得分:2)
尝试将您的片段传递给AsyncTask,如下所示:
class WorkerTask extends AsyncTask<Void, Void, Void> {
private MyMapFragment mapFragment;
WorkerTask(MyMapFragment mapFragment) {
this.mapFragment = mapFragment;
}
@Override
protected Void doInBackground(Void... params)
{
...
}
@Override
protected void onPostExecute(Void res)
{
mapFragment.updateStuff(...);
}
}
答案 1 :(得分:0)
我遇到了同样的问题。它使用广播接收器解决了。我就这样做了:
class TabsTask extends AsyncTask<String, Void, String> {
static final String BROADCAST_ACTION = "CALL_FUNCTION";
@Override protected String doInBackground(String... params) {
//some statements
}
protected void onPostExecute(String result) {
try {
Intent broadcast = new Intent();
broadcast.setAction(BROADCAST_ACTION);
mContext.sendBroadcast(broadcast);
} catch (Exception e) {
//some statement(s)
}
}
}
现在,在你的片段类中:
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
function_you_want_to_call();
}
};
public void onResume() {
//other statements
IntentFilter filter = new IntentFilter();
filter.addAction(TabsTask.BROADCAST_ACTION);
activity.registerReceiver(receiver, filter);
}
public void onPause() {
//other statements
activity.unregisterReceiver(receiver);
}