编辑:问题在一行:
如何从MenuItem onOptionsItemSelected传递上下文?
编辑2:这是我正在做的事情的全局指示:https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabsPager.java
我正在构建一个基于ActionBarSherlock的应用程序。它使用制表符,片段和viewpager。它意味着尽可能多才多艺。选项卡可以包含webview或列表视图。这是一个截图:
首次加载选项卡(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,因为我没有相应的上下文信息。谁能告诉我如何在这种情况下进行刷新?
如果有人愿意提供帮助,需要查看更多代码,我很乐意遵守。
提前致谢。
答案 0 :(得分:5)
您说您正在响应onOptionsItemSelected中的按钮,因此如果您在Activity中执行此操作,则上下文只是this
。如果在片段中它是getActivity()
。
答案 1 :(得分:0)
与所有小部件一样,您的刷新按钮是View的子类,可以调用view.getContext()来获取创建它的Activity上下文。
答案 2 :(得分:0)
虽然杰森正确地回答了我的问题,但我发现我之后还有一个问题。我在FragmentActivity中放置了onOptionsItemSelected。当我在ListFragment中移动它时,我得到了他的答案。