我想在我的自定义类中不扩展 Activity 来获取我的字符串数组。有没有办法做到这一点?
String[] foo_array = getResources().getStringArray(R.array.foo_array);
如果不扩展 Activity 将无法工作,所以我需要一个解决方法。
将上下文传递给自定义类的构造函数并使用相同的
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;
}
}
试试这个,
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()
您需要将 Activity 上下文传递给 Custom 类。
private Context context;
public CustomClass(Context context)
{
this.context=context;
}
如果您使用 numberpicker 并从 sring xml 传递字符串然后使用它
np_Basic_Hight.setMinValue(0);
np_Basic_Hight.setMaxValue(71);
np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));