2017-10-04 6 views
1

私は本当にカスタムビューのコンストラクタが不思議です。現在私はextendsRelativeLayoutを持っています。各ビューには初期化のためにcontextが必要です。だから、私はsuper()をコンストラクタに入れました。しかし、activityが私のクラスに必要なので、私はcontextをそれから取り出しました。私が知る限り、activitycontextです。なぜ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が欠落しているコンストラクタツールによって使用されています(コンテキスト)または(コンテキスト、属性セット)または(コンテキストを、属性セット、int)

これを無視する必要がありますか、コンストラクタを渡す必要がありますか:activitycontext

ありがとうございました!

答えて

2

代わりActivityの良いパスContext、そのContextViewを呼び出すことが可能ですが、Activityなしので。たとえば、DialogServiceから呼び出した場合です。

また、documentationに基づいて、唯一のコンストラクタがが実際に必要ですです。しかし、そのコンストラクタには引数としてAttributeSetが含まれています。

あなたのケースでは、それは

public CustomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.activity = (Activity) context; //better to hold context actually 
    initialize(context); 
} 

のように見える必要があり、確かに良い練習のために利用可能なすべてのコンストラクタ

を使用することです
関連する問題