2012-09-05 88 views
1

我的問題與此問題類似Can't make static reference to non-static method (Android getApplicationContext()) 我需要獲取SherlockFragmentActivity的上下文以訪問數據庫類。我在上面的這個鏈接中嘗試瞭解決方案,但沒有奏效。無法使用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 
} 
} 
} 

回答

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來訪問你的應用程序的資源。

1

你確定這個問題是關係到SherlockFragmentActivity本身?

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

相關問題