Android:如何从自定义类中的strings.xml访问字符串数组?

时间:2013-10-16 15:59:52

标签: android arrays

我想获取我的字符串数组而不在我的自定义类中扩展Activity。有没有办法做到这一点?

String[] foo_array = getResources().getStringArray(R.array.foo_array);如果不延长活动就行不通,所以我需要一个解决方法。

4 个答案:

答案 0 :(得分:31)

将上下文传递给自定义类的构造函数并使用相同的

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

同时检查此

android getResources() from non-Activity class

编辑:

更改此

public class CustomClass(Context context) 
{
}

public class CustomClass
{
   Context mContext;
   public CustomClass(Context context) // constructor 
   {
    mContext = context;
   }
}

答案 1 :(得分:6)

试试这个,

Context context=getApplicationContext();
String[] foo_array = context.getResources().getStringArray(R.array.foo_array);

并且,不要使用Activity Context,因为它与Activity生命周期相关联。

<强>更新

getApplicationContext()来自Context类。这意味着扩展Context的任何东西都有这种方法。这也意味着您可以从service或其他资源使用此功能。

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

如果你宣布你的活动是这样的

myMethod(Activity activity) //this is bad

如果它像下面那样发芽,

myMethod(Context context) //this is ok

但是从上面的声明中,我们没有通过ActivityService Context,因为它们有自己的生命周期。相反,您将使用getApplicationContext()

答案 2 :(得分:0)

您需要将Activity上下文传递给Custom类。

private Context context;
public CustomClass(Context context)
{
 this.context=context;
}

答案 3 :(得分:0)

如果您使用数字选择器并从sring xml传递字符串,则使用此

np_Basic_Hight.setMinValue(0);

    np_Basic_Hight.setMaxValue(71);
    np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));