6

编辑:一行中的问题:

如何从 MenuItem onOptionsItemSelected 传递上下文?

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


我正在构建一个基于 ActionBarSherlock 的应用程序。它使用标签、片段和浏览器。它意味着尽可能多才多艺。选项卡可以包含 web 视图或列表视图。这是一个屏幕截图:

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

首次加载选项卡 (SherlockListFragment) 时,它使用 ASyncTask 从提要中读取内容。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,因为我没有适当的上下文信息。谁能告诉我在这种情况下如何执行刷新?

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

提前致谢。

4

3 回答 3

7

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

于 2012-05-23T18:49:23.970 回答
0

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

于 2012-05-17T11:59:44.673 回答
0

尽管 Jason 正确回答了我的问题,但之后我发现我还有一个问题。我在我的 FragmentActivity 中放置了 onOptionsItemSelected。当我将它移到我的 ListFragment 中时,我得到了他的答案。

于 2012-05-23T20:10:27.900 回答