【问题标题】:Access fragment method from asynctask postexecute从 asynctask postexecute 访问片段方法
【发布时间】:2013-10-04 15:13:15
【问题描述】:

我需要一些帮助来管理片段和异步任务,我在 google 和 stackoverflow 中搜索了很多,但没有得到肯定的结果。

我有一个带有 TabsActivity 和三个标签(片段)的应用。其中之一是谷歌地图。我正在尝试使用 get 调用更新地图中的标记,抛出自定义请求类。

问题是我想从 postexecute 方法调用片段映射类中的一个函数。我在异步任务中有上下文,我也尝试将片段作为参数传递,但我什至不知道如何调用函数。 Asynctask 类是一个文件(它不在片段类中)。

我们将不胜感激。

问候。

P.D - 对不起我的英语不好:))

【问题讨论】:

  • 如果您可以向我们展示一些代码,那么我们可以帮助您找出要更改的内容。

标签: android android-fragments android-asynctask


【解决方案1】:

尝试像这样将您的片段传递给 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(...);
  }
}

【讨论】:

  • 嗨,伙计,非常感谢。我已经尝试过这种方式,但没有奏效。我又试了一次,问题是我的片段中的方法是私有的(失败)干杯!
【解决方案2】:

我遇到了同样的问题。它使用广播接收器解决了。我就是这样做的:

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);
}

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 2018-03-20
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多