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/avoiding-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 生命周期相关。

更新

getApplicationContext()来自上下文类。这意味着任何扩展 Context 的东西都有这个方法。这也意味着您将能够service从其他资源或从其他资源中使用它。

但是,如果您的自定义类不扩展 Activity/context,则必须将 Context 作为参数传递才能使用getApplicationContext()

如果你这样声明你的活动

myMethod(Activity activity) //this is bad

芽如果像下面这样,

myMethod(Context context) //this is ok

但是从上面的声明不通过Activity或者Service 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 回答
0

如果您使用 numberpicker 并从 sring xml 传递字符串然后使用它

np_Basic_Hight.setMinValue(0);

    np_Basic_Hight.setMaxValue(71);
    np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));
于 2019-12-21T07:11:44.090 回答