无法使用SherlockFragmentActivity获取应用程序上下文

时间:2012-09-05 17:35:09

标签: android sqlite actionbarsherlock

我的问题类似于这个问题Can't make static reference to non-static method ( Android getApplicationContext() ) 我需要获取SherlockFragmentActivity的上下文才能访问数据库类。我在上面的链接中尝试了解决方案,但它没有用。

问题1:如何在下面的代码中获取上下文。

问题2:我收到一个错误,迫使我对应用程序上下文变量使用'static'而不是public。我知道静态是一个不变的变量。但是,每次单击选项卡时,此变量都将更改。此外,数据库类不需要“静态”变量。我很困惑为什么我需要一个静态变量。

我的SherlockFragmentActivity:

public class FragmentTabs extends SherlockFragmentActivity {
    TabHost mTabHost;
    TabManager mTabManager;
    static FragmentTabs appState;
 TabSwitchIdDatabase tsid = new TabSwitchIdDatabase(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(SampleList.THEME); // Used for theme switching in samples
        super.onCreate(savedInstanceState);

        appState = ((FragmentTabs)getApplicationContext());

        //.... more code
}
 public static class TabManager implements TabHost.OnTabChangeListener {..// see code snipit below....}

}

我需要放置上下文

    public static class TabManager implements TabHost.OnTabChangeListener {

//... more code

static class DummyTabFactory implements TabHost.TabContentFactory {

//... more code

@Override
        public void onTabChanged(String tabId) {
            TabInfo newTab = mTabs.get(tabId);
            System.out.println(tabId);

            tsid.open();// broken , scoping problem
            Boolean x =tsid.tabExists(0);
            String tabIDfromDatabase = tsid.getTab(0);// broken , scoping problem
            tsid.close();// broken , scoping problem
}
}
}

2 个答案:

答案 0 :(得分:1)

您确定问题与SherlockFragmentActivity本身有关吗?

您是否检查过(例如)您在android:name=".MyApplication"文件中指定了AndroidManifest.xml

答案 1 :(得分:1)

你有DummyTabFactory的构造函数吗?

  • 将上下文作为参数传递给它。
  • 将传递的上下文分配给本地变量。

所以你的代码应该是这样的:

public class FragmentTabs extends SherlockFragmentActivity {
    DummyTabFactory mDummyTabFactory = new DummyTabFactory(getApplicationContext());

    static class DummyTabFactory implements TabHost.TabContentFactory {
        private Context mContext;

        public DummyTabFactory(Context context) {
            super(fm);
            mContext = context;
        }
    }
}

现在,您可以使用mContext访问应用的资源。