我想在不扩展自定义类中的活动的情况下获取我的字符串数组。有没有办法做到这一点?
如果不扩展活动,String[] foo_array = getResources().getStringArray(R.array.foo_array);
将无法工作,因此我需要解决方法。
将上下文传递给自定义类的构造函数并使用相同的
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;
}
}
试试这个,
Context context=getApplicationContext();
String[] foo_array = context.getResources().getStringArray(R.array.foo_array);
并且,不要使用活动上下文,因为它与活动生命周期相关联。
更新,
getApplicationContext()
来自上下文类。这意味着任何扩展上下文都有此方法。这也意味着您将能够从service
或其他资源使用它。
但是,如果自定义类不扩展活动/上下文,则必须将上下文作为参数传递才能使用getApplicationContext()
如果您像这样声明您的活动
myMethod(Activity activity) //this is bad
芽,如果它像下面,
myMethod(Context context) //this is ok
但从上面的声明不要通过Activity
或Service
Context
,因为它们有自己的生命周期。 相反,您将使用getApplicationContext()
您需要将活动上下文传递给自定义类。
private Context context;
public CustomClass(Context context)
{
this.context=context;
}
如果您使用数字选择器并从sring xml传递字符串,则使用此
np_Basic_Hight.setMinValue(0);
np_Basic_Hight.setMaxValue(71);
np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));