Bir TextView içeren özel bir görünüm A
var. TextView için resourceID
döndüren bir yöntem yaptım. Hiçbir metin tanımlanmamışsa, yöntem varsayılan olarak -1 değerini döndürecektir. Ayrıca A
görünümden devralan özel bir görünüm B
var. Özel görünümüm "merhaba" metnine sahip. Süper sınıfın özniteliğini almak için yöntem çağırdığımda, bunun yerine -1 geri alırım.Android: Özel görünümün süper sınıfından bir özellik nasıl edinilir
Kodda, değeri nasıl alabileceğimin bir örneği de var, ancak bir tür hacky hissi veriyor.
attrs.xml
<declare-styleable name="A">
<attr name="mainText" format="reference" />
</declare-styleable>
<declare-styleable name="B" parent="A">
<attr name="subText" format="reference" />
</declare-styleable>
sınıfı
protected static final int UNDEFINED = -1;
protected void init(Context context, AttributeSet attrs, int defStyle)
{
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.A, defStyle, 0);
int mainTextId = getMainTextId(a);
a.recycle();
if (mainTextId != UNDEFINED)
{
setMainText(mainTextId);
}
}
protected int getMainTextId(TypedArray a)
{
return a.getResourceId(R.styleable.A_mainText, UNDEFINED);
}
B sınıfı
protected void init(Context context, AttributeSet attrs, int defStyle)
{
super.init(context, attrs, defStyle);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.B, defStyle, 0);
int mainTextId = getMainTextId(a); // this returns -1 (UNDEFINED)
//this will return the value but feels kind of hacky
//TypedArray b = context.obtainStyledAttributes(attrs, R.styleable.A, defStyle, 0);
//int mainTextId = getMainTextId(b);
int subTextId = getSubTextId(a);
a.recycle();
if (subTextId != UNDEFINED)
{
setSubText(subTextId);
}
}
I f sahip olduğu bir başka çözüm şimdiye kadar ound aşağıdakileri yapmaktır. Bunun bir tür hacky olduğunu düşünüyorum.
<attr name="mainText" format="reference" />
<declare-styleable name="A">
<attr name="mainText" />
</declare-styleable>
<declare-styleable name="B" parent="A">
<attr name="mainText" />
<attr name="subText" format="reference" />
</declare-styleable>
Özel görünümün süper sınıfından nasıl özellik alınır? Kalıtımın özel görünümlerle nasıl çalıştığına dair iyi örnekler bulamıyorum.