1

私の問題はこの質問に似ています 非静的メソッド ( Android getApplicationContext() ) への静的参照を作成できません データベース クラスにアクセスするには、SherlockFragmentActivity のコンテキストを取得する必要があります。上記のリンクの解決策を試しましたが、うまくいきませんでした。

質問 1: 以下のコードでコンテキストを取得するにはどうすればよいですか。

質問 2: アプリケーション コンテキスト変数に public ではなく「static」を使用するよう強制するエラーが表示されます。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

あなたのコンストラクタはあります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 に答える
1

問題が SherlockFragmentActivity 自体に関連していることは確かですか?

android:name=".MyApplication"ファイルで指定したことを (たとえば) チェックしましたAndroidManifest.xmlか?

于 2013-05-12T23:13:55.027 に答える