我有一个需要访问Application对象的复合控件。我的控件扩展了LinearLayout,因为它不是一个Activity我不能调用getApplication()。有没有办法从布局/视图中执行此操作或传递应用程序?
答案 0 :(得分:1)
调用My Control Class时,必须在构造函数中传递上下文。
答案 1 :(得分:1)
根据你需要Application对象的内容,你可以做几件事。
如果您需要特定的应用程序实例,可以尝试将Context
对象转换为Activity
:
public class MyLinearLayout extends LinearLayout {
private Application mApplication;
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
//As this is a custom ViewGroup, Context will be an Activity, but just to make sure..
if(context instanceof Activity)
mApplication = ((Activity) context).getApplication();
else
throw new IllegalArguementException("Context must be an Activity");
}
}
上面的代码检查以确保传递给您的自定义视图的Context是一个Activity,但实际上应该总是这样。
如果您只需要将Application对象用作`Context',那么可以调用'context.getApplicationContext()'方法:
public class MyLinearLayout extends LinearLayout {
private Context mAppContext;
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mAppContext = context.getApplicationContext();
}
}