2017-10-04 38 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); 
} 

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