これらのクラスで何をするかわからない場合は、こちらをご覧ください。また、これが機能するかどうかはまだ 100% 確信が持てません。テスト中です。
私は現在、クラスのカスタムxml属性の使用を簡素化する簡素化された基本クラスの作成に取り組んでいAttributeSet
ます
基本的に、これは私が最終結果として探しているものです...
public class SimpleViewImplementation extends SimpleView<LinearLayout> {
// List of members here
private String value;
public SimpleViewImplementation(Context context) {
super(context);
}
public SimpleViewImplementation(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void setFromStyledAttributes(TypedArray attr) {
// Set conditions for each member here via TypedArray (use setters)
setValue(attr.getString(R.styleable.SimpleViewImplementation_value));
}
@Override
protected void initView() {
// Set initial conditions for each member here
this.value = "this is the default value!";
}
// Getters & Setters here for members
public String getValue() { return this.value; }
public void setValue(String value) {
this.value = value;
this.updateViewOnSet();
}
}
これはすべての魔法を行う「基本」クラスです。問題は実際にはクラスの「署名」です。type を拡張するために必要T
です。オンラインでの調査でそれを行う方法を見逃したか、それを行うことができません。それができない場合、上記の私の結果をいくらか得るための提案はありますか. これらのクラスで何をするかわからない場合は、こちらをご覧ください。
public abstract class SimpleView<T> { // I would like this class to extend Type T. ie SimpleView<LinearLayout> would extend this class to be a LinearLayout...getting rid of compile-time errors below
// ^ can I put anything here????
public SimpleView(Context context) {
super(context); // CTE (Compile-time error)
initView();
}
public SimpleView(Context context, AttributeSet attrs) {
super(context, attrs); // CTE
initView();
TypedArray attr = context.getTheme().obtainStyledAttributes(attrs, R.styleable.DrawerSongDetail, 0, 0);
try {
this.setFromStyledAttributes(attr);
} finally {
attr.recycle();
}
}
// Sets all members based on AttributeSet parameter
abstract protected void setFromStyledAttributes(TypedArray attr);
// Sets all initial values of members
abstract protected void initView();
private void updateViewOnSet() {
this.requestLayout(); // CTE
this.invalidate(); // CTE
}
}