我想获取我的字符串数组而不在我的自定义类中扩展Activity。有没有办法做到这一点?
String[] foo_array = getResources().getStringArray(R.array.foo_array);
如果不延长活动就行不通,所以我需要一个解决方法。
答案 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
但是从上面的声明中,我们没有通过Activity
或Service
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));