在Android的自定义视图中的IDE警告
问题描述:
我真的很好奇自定义视图的构造函数。目前我有一个extends
RelativeLayout
。每个视图需要context
进行初始化。所以,我把super()
放在构造函数中。虽然,我需要我班的activity
,所以我拿了context
。据我所知,activity
也是context
太为什么Android Studio
给我一个检查,我错过了context
构造函数?我的阶级是这样的:在Android的自定义视图中的IDE警告
public class CustomView extends RelativeLayout {
private Activity activity;
public CustomView(Activity activity) {
super(activity.getApplicationContext());
this.activity = activity;
initialize(activity.getApplicationContext());
}
//initialize method
}
这是确切的消息Android Studio
给我:
自定义视图CustomView所使用的工具,缺少构造函数:(上下文)或(上下文,AttributeSet中)或(上下文, AttributeSet,int)
我应该忽略这个还是应该在构造函数中传入:activity
和context
?
感谢您的所有信息!
答
更好地通过Context
而不是Activity
,因为它可能会拨打View
与Context
但没有Activity
。例如,如果您从Service
拨打Dialog
。
也基于documentation只有一个构造函数是真的必要。但该构造函数包含AttributeSet
作为参数。
在你的情况下,应该看起来像
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this.activity = (Activity) context; //better to hold context actually
initialize(context);
}
而且可以肯定好的做法是使用所有可用的构造函数