2017-10-04 54 views
1

我真的很好奇自定义视图的构造函数。目前我有一个extendsRelativeLayout。每个视图需要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)

我应该忽略这个还是应该在构造函数中传入:activitycontext

感谢您的所有信息!

回答

2

更好地通过Context而不是Activity,因为它可能会拨打ViewContext但没有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); 
} 

而且可以肯定好的做法是使用所有可用的构造函数