2012-09-05 1 views
1

내 질문은이 질문과 비슷합니다. Can't make static reference to non-static method (Android getApplicationContext()) 데이터베이스 클래스에 액세스하려면 SherlockFragmentActivity 컨텍스트를 가져와야합니다. 위의 링크에서 해결책을 시도했지만 작동하지 않았습니다.SherlockFragmentActivity를 사용하여 응용 프로그램 컨텍스트를 가져올 수 없습니다.

질문 1 : 아래 코드에서 컨텍스트를 얻으려면 어떻게해야합니까?

질문 2 : 응용 프로그램 컨텍스트 변수에 public 대신 'static'을 사용하도록하는 오류가 발생합니다. 나는 정적 변수가 변하지 않는 변수라는 것을 알고있다. 그러나이 변수는 탭을 클릭 할 때마다 변경됩니다. 또한 '정적'변수는 데이터베이스 클래스에 필요하지 않습니다. 왜 여기에 정적 변수가 필요한지 혼란 스럽습니다.

내 SherlockFragmentActivity :

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 자체와 관련되어 있는지

내가 컨텍스트를 둘 필요가
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....} 

} 

있습니까?

AndroidManifest.xml 파일에 android:name=".MyApplication"을 지정했는지 확인 했습니까?

관련 문제