28

カスタム クラスで Activity を拡張せずに文字列配列を取得したいと思います。これを行う方法はありますか?

String[] foo_array = getResources().getStringArray(R.array.foo_array);Activity を拡張しないと動作しないため、回避策が必要です。

4

4 に答える 4

44

カスタムクラスのコンストラクターにコンテキストを渡し、同じものを使用します

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;
   }
}
于 2013-10-16T16:03:10.053 に答える
9

これを試して、

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

しかし、上記の宣言からは合格しないActivityService Context、独自のライフサイクルがあるためです。代わりに使用しますgetApplicationContext()

于 2013-10-16T16:02:53.350 に答える
0

Activity コンテキストを Custom クラスに渡す必要があります。

private Context context;
public CustomClass(Context context)
{
 this.context=context;
}
于 2013-10-16T16:02:38.027 に答える