1

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

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

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

我的 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
}
}
}
4

2 回答 2

1

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

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

于 2013-05-12T23:13:55.027 回答
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来访问您的应用程序的资源。

于 2013-05-12T23:46:04.343 回答