カスタム クラスで Activity を拡張せずに文字列配列を取得したいと思います。これを行う方法はありますか?
String[] foo_array = getResources().getStringArray(R.array.foo_array);
Activity を拡張しないと動作しないため、回避策が必要です。
カスタムクラスのコンストラクターにコンテキストを渡し、同じものを使用します
new CustomClass(ActivityName.this);
それで
Context mContext;
public CustomClass(Context context)
{
mContext = context;
}
コンテキストを使用する
String[] foo_array = mContext.getResources().getStringArray(R.array.foo_array);
また、心に留めておいてください
コンテキスト アクティビティへの長期間の参照を保持しないでください (アクティビティへの参照は、アクティビティ自体と同じライフ サイクルを持つ必要があります)。
http://android-developers.blogspot.in/2009/01/voiding-memory-leaks.html
こちらもチェック
非Activityクラスからのandroid getResources()
編集:
これを変える
public class CustomClass(Context context)
{
}
に
public class CustomClass
{
Context mContext;
public CustomClass(Context context) // constructor
{
mContext = context;
}
}
これを試して、
Context context=getApplicationContext();
String[] foo_array = context.getResources().getStringArray(R.array.foo_array);
また、Activity ライフサイクルに関連付けられているため、Activity Context は使用しないでください。
更新,
getApplicationContext()
Contextクラスからのものです。つまり、拡張された Context にはすべてこのメソッドがあります。service
これは、他のリソースから、または他のリソースからこれを使用できることも意味します。
ただし、カスタム クラスが Activity/context を拡張しない場合は、使用するパラメータとして Context を渡す必要があります。getApplicationContext()
このようにアクティビティを宣言すると
myMethod(Activity activity) //this is bad
Bud 次のような場合は、
myMethod(Context context) //this is ok
しかし、上記の宣言からは合格しないActivity
かService
Context
、独自のライフサイクルがあるためです。代わりに使用しますgetApplicationContext()
Activity コンテキストを Custom クラスに渡す必要があります。
private Context context;
public CustomClass(Context context)
{
this.context=context;
}