如何将来自MenuItem onOptionsItemSelected的上下文传递给ASyncTask?

时间:2012-05-16 11:57:57

标签: android static android-asynctask fragment actionbarsherlock

编辑:问题在一行:

  

如何从MenuItem onOptionsItemSelected传递上下文?

编辑2:这是我正在做的事情的全局指示:https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabsPager.java


我正在构建一个基于ActionBarSherlock的应用程序。它使用制表符,片段和viewpager。它意味着尽可能多才多艺。选项卡可以包含webview或列表视图。这是一个截图:

http://dl.dropbox.com/u/11218283/Screenshot_2012-05-16-13-33-08.png

首次加载选项卡(SherlockListFragment)时,它会使用ASyncTask从Feed中读取内容。 OnPostExecute它更新列表并将结果保存到SharedPreference字符串(作为缓存的一种方式)。可以想象,AsyncTask需要上下文来执行此操作。我正在调用SherlockListFragment中的asynctask,如下所示:

x.new refreshList(this,getActivity()).execute();

(x是对我当前文件的引用)。

并将其转移到我的AsyncTask,就像这样

 public refreshList(TabList a,Context b){
    this.mContext = a;
    this.mCont = b;
}

一切正常。但正如你所看到的,我已经添加了一个菜单项以进行刷新。我设置的方式,我无法重新运行ASyncTask,因为我没有相应的上下文信息。谁能告诉我如何在这种情况下进行刷新?

如果有人愿意提供帮助,需要查看更多代码,我很乐意遵守。

提前致谢。

3 个答案:

答案 0 :(得分:5)

您说您正在响应onOptionsItemSelected中的按钮,因此如果您在Activity中执行此操作,则上下文只是this。如果在片段中它是getActivity()

答案 1 :(得分:0)

与所有小部件一样,您的刷新按钮是View的子类,可以调用view.getContext()来获取创建它的Activity上下文。

答案 2 :(得分:0)

虽然杰森正确地回答了我的问题,但我发现我之后还有一个问题。我在FragmentActivity中放置了onOptionsItemSelected。当我在ListFragment中移动它时,我得到了他的答案。