カスタムビューを作成するときに、私は多くの人々がこのようにそれを行うように見えることに気づいた:これでandroidカスタムビューコンストラクタの場合はsuper()を呼び出すかthis()を呼び出す必要がありますか?
public MyView(Context context) {
super(context);
// this constructor used when programmatically creating view
doAdditionalConstructorWork();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
// this constructor used when creating view through XML
doAdditionalConstructorWork();
}
private void doAdditionalConstructorWork() {
// init variables etc.
}
私の問題は、それが私の変数は、最終的な作りから私を停止することです。次のことをしない理由は何ですか?
public MyView(Context context) {
this(context, null);
// this constructor used when programmatically creating view
}
public MyView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// this constructor used when creating view through XML
}
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// this constructor used where?
// init variables
}
私は、XMLを通って、コードをうまくビューを作成することができましたが、私はこのアプローチにはどんな欠点があるかはわかりません。これはすべての場合に有効ですか?
'this'を呼び出すと、現在のクラスの別のコンストラクタが呼び出されます。私はこれがあなたが気づいていないことだと思います。このように 'this(context、null);'は 'public MyView(Context context、AttributeSet attrs){'を呼び出し、 'public MyView(Context context、AttributeSet attrs、int defStyle){'このコンストラクタの呼び出しは、Java言語ではあまり一般的ではありませんが、これはうまくいかない理由はありません。 –
私は、パラメータについて心配していました。 :) –