2017-01-18 12 views
0

私はAndroidでコンテキスト変数を多く使用しなければなりません。そして、私は退屈になるたくさんの周りを渡す必要があります。私の主な活動のグローバルコンテキスト変数をonCreateメソッドで割り当てて、文脈が必要なときはいつでもそのコンテキスト変数をゲッターメソッドで使うのは大丈夫ですか?たとえば、次のようにメインアクティビティからコンテキスト変数を取得しても問題ありませんか?

public class MainActivity extends AppCompatActivity { 

    private Context context = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // ... code 

     Context = this; 
    } 

    // Context getter method 
    public Context getContext(){ 

    return context; 
    } 
} 

私はコンテキストを必要とする別のアクティビティからメソッドを呼び出しする必要がある場合(a)は、私は私の主な活動から、このコンテキスト変数を使用できますか?

(b)コンテキストを必要とするフラグメントからメソッドを呼び出すとどうなりますか?私はあなたがアプリケーションextented MyApplicationをコンテキスト変数、定義示唆

+0

アプリケーションを使用してください。この回答を見るhttp://stackoverflow.com/a/38931824/1025379 – susemi99

+0

私はこのアプローチで唯一の問題は、 'context'をアクティビティにキャストすることで個々のアクティビティメソッドにアクセスできないことです。それがこれと一緒に行くならば。 –

答えて

0

:あなたのAndroidManifest.xmlで public class MyApplication extends Application { public static Context mContext;//instantiation it in onCreate(); ... } を、<Application android:name=".MyApplication" .... 今、あなたはどこでもあなたのコードでmContextを使用することができます。

0

私の経験と知識によれば、applicationコンテキストを使用することは恐ろしい、素朴なアプローチです。詳細についてはhttps://stackoverflow.com/a/7298955/3758972をお読みください。

あなたが代わりに行うことができますが、すべてのActivityが共通BaseActivityクラスを拡張して、以下のようなBaseActivityonCreate方法であなたのコンテキストを定義し、初期化しますです:

public class BaseActivity extends AppCompatActivity { 

private Context context = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    Context = this; 
} 

// Context getter method 
public Context getContext(){ 
return context; 
} 
} 

が、私は私の主な活動から、このコンテキスト変数を使用できますコンテキストを必要とする別のアクティビティからメソッドを呼び出す必要があるとき

はい、すべてのアクティビティを拡張して、contextを特定のアクセス方法にキャストすることができます。

((ActivityA)getContext()).methodOfAActivity(); 

((ActivityB)getContext()).methodOfBActivity(); 

私はコンテキストを必要とするフラグメントからメソッドを呼び出すときは?

上記と同様に、コンテキスト内でコンテキストを使用してキャストして、フラグメント内のアクティビティメソッドにアクセスすることができます。

ご案内させていただきます。

関連する問題