我的问题类似于这个问题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
}
}
}
答案 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
访问应用的资源。