اندرويد:عرض مخصص مع مرجع الكائن من أترس.شمل ، دائما فارغة
-
09-12-2019 - |
سؤال
أحاول إعداد تسلسل هرمي للعلاقة بين الكائنات.كل كائن له أصل من نفس النوع نفسه ، أو null
.
لدي main.xml
يحتوي على بعض هذه:
<com.morsetable.MorseKey
android:id="@+id/bi"
android:layout_weight="1"
custom:code=".."
custom:parentKey="@id/be"
android:text="@string/i" />
a res/values/attrs.xml
التي تحتوي على واحدة من هذه:
<declare-styleable name="MorseKey">
<attr name="code" format="string"/>
<attr name="parentKey" format="reference"/>
</declare-styleable>
وفئة (هذا ليس نشاطي) تحتوي على هذا:
public class MorseKey extends Button {
public MorseKey(Context context, AttributeSet attrs) {
super(context, attrs);
initMorseKey(attrs);
}
private void initMorseKey(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs,
R.styleable.MorseKey);
final int N = a.getIndexCount();
for (int i = 0; i < N; i++) {
int attr = a.getIndex(i);
switch (attr)
{
case R.styleable.MorseKey_code:
code = a.getString(attr);
break;
case R.styleable.MorseKey_parentKey:
parent = (MorseKey)findViewById(a.getResourceId(attr, -1));
//parent = (MorseKey)findViewById(R.id.be);
Log.d("parent, N:", ""+parent+","+N);
break;
}
}
a.recycle();
}
private MorseKey parent;
private String code;
}
هذا لا يعمل.كل MorseKey
تقارير المثيل N == 2
(جيد) و parent == null
(سيئة).المزيد, parent == null
حتى عندما أحاول صراحة تعيينه إلى بعض القيمة التعسفية (انظر التعليق).لقد حاولت أيضا custom:parentKey="@+id/be"
(مع علامة الجمع) ولكن هذا لم ينجح أيضا.ماذا أفعل خطأ?
المحلول
إذا كانت فئة مورسيكي الخاصة بك في ملف جافا منفصل ، والتي أفترض هو الحال من بيانمنت الخاص بك "فئة (وهذا ليس نشاطي)".ثم أعتقد أن المشكلة هي في استخدامك ل فيندفيوبيد ().فيندفيوبيد () سوف تبحث عن مورد داخل عرض مورسيكي نفسه بدلا من الرئيسي.ملف شمل.
ربما حاول الحصول على الوالد من مثيل مورسيكي واستدعاء الوالد.فيندفيوبيد ().
case R.styleable.MorseKey_parentKey:
parent = this.getParent().findViewById(a.getResourceId(attr, -1));
على الرغم من أن هذا لن يعمل إلا إذا كان الوالد مورسيكي والطفل في نفس التخطيط.
<LinearLayout ...>
<MorseKey ..../><!-- parent -->
<MorseKey ..../><!-- child -->
</LinearLayout>
ولكن سيكون من الصعب جدا العثور على طريقة العرض إذا كان التخطيط الخاص بك هو شيء من هذا القبيل مع الوالد والطفل في تخطيطات منفصلة.
<LinearLayout ...>
<MorseKey ..../><!-- parent -->
</LinearLayout>
<LinearLayout ...>
<MorseKey ..../><!-- child -->
</LinearLayout>