7

Soonil で説明されているように、Android.app.Application のサブクラスを使用して、Android アプリのアクティビティ全体で必要なグローバル変数を格納しています ( Android でグローバル変数を宣言する方法で)。

アプローチは次のようになります。

class MyApp extends Application {

    private String myState;

    public String getState(){
    return myState;
    }
        public void setState(String s){
        myState = s;
    }
}

class Blah extends Activity {

    @Override
    public void onCreate(Bundle b){
    ...
    MyApp appState = ((MyApp)getApplicationContext());
    String state = appState.getState();
    ...
    }
}

この時点まで、このアプローチは、どのアクティビティからでもグローバル変数にアクセスするためにうまく機能しました。しかし、今日、同じアプローチを使用して、次のエラーが発生しました。

Cannot make a static reference to the non-static method getApplicationContext()
from the type ContextWrapper

以前との主な違いは、新しいアクティビティが実際にはフラグメント (正確には、SherlockFragmentActivity) であることです。

以前のように appState にアクセスできない理由と、良い回避策はありますか?

どうもありがとう。


編集: いいキャッチ、Matt B. getApplicationContext() を実際に呼び出している場所が別のクラス内にあることがわかりました。呼び出しポイントは次のとおりです。

public class MyActivity extends SherlockFragmentActivity {
    public static class AccountListFragment extends SherlockListFragment {
        MyApp appState = ((MyApp)getApplicationContext());
        ...
    }
    ...
}

また、以下に示すように、呼び出しを次のように変更すると、エラーはなくなりました

MyApp appState = ((MyApp)getActivity().getApplicationContext());
4

1 に答える 1

4
getActivity().getApplication() 

うまくいくはずです。

最初にアクティビティへの参照が必要で、次にアプリケーションへの参照が必要です

違いは、Activity ではなく Fragment からこの関数を呼び出していることです ("Activity" という名前を付けましたが)。

于 2012-06-01T17:44:50.257 に答える