【发布时间】:2013-10-24 20:23:17
【问题描述】:
我想在不扩展自定义类中的 Activity 的情况下获取我的字符串数组。有没有办法做到这一点?
String[] foo_array = getResources().getStringArray(R.array.foo_array); 在不扩展 Activity 的情况下将无法工作,所以我需要一个变通方法。
【问题讨论】:
我想在不扩展自定义类中的 Activity 的情况下获取我的字符串数组。有没有办法做到这一点?
String[] foo_array = getResources().getStringArray(R.array.foo_array); 在不扩展 Activity 的情况下将无法工作,所以我需要一个变通方法。
【问题讨论】:
如果你使用 numberpicker 并从 sring xml 传递字符串然后使用这个
np_Basic_Hight.setMinValue(0);
np_Basic_Hight.setMaxValue(71);
np_Basic_Hight.setDisplayedValues(getContext().getResources().getStringArray(R.array.hieght));
【讨论】:
将上下文传递给自定义类的构造函数并使用相同
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;
}
}
【讨论】:
public class CustomClass(Context context) {} 时,它会给我错误提示 Syntax error on token "(", { expected。
试试这个,
Context context=getApplicationContext();
String[] foo_array = context.getResources().getStringArray(R.array.foo_array);
并且,不要使用 Activity 上下文,因为它与 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()
【讨论】:
Context context=getApplicationContext(); 然后给出错误The method getApplicationContext() is undefined for the type CustomClass。
myMethod(Activity activity)不好? developer.android.com/reference/android/content/Context.html。 Activity 是 Context 的一个已知间接子类。 stackoverflow.com/questions/7298731/…
您需要将 Activity 上下文传递给自定义类。
private Context context;
public CustomClass(Context context)
{
this.context=context;
}
【讨论】: