オブジェクト間の関係階層を設定しようとしています。すべてのオブジェクトは、それ自身と同じタイプの親を持ちます。つまり、null
です。Android:attrs.xmlからのオブジェクト参照付きのカスタムビュー。常にnull
私はこれらのいくつかが含まれていmain.xml
あります
<com.morsetable.MorseKey
android:id="@+id/bi"
android:layout_weight="1"
custom:code=".."
custom:parentKey="@id/be"
android:text="@string/i" />
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
(悪い)を報告します。 More、parent == null
私は明示的に何らかの値に設定しようとしています(コメント参照)。私もcustom:parentKey="@+id/be"
(プラス記号付き)を試しましたが、それもうまくいきませんでした。私は間違って何をしていますか?
私はAPIに注意を払うように教えてください。 this.getRootView()を呼び出すと、すべてのMorseKeyが独自のルートビューになります。 – mkjeldsen
ああ!コンストラクタからgetParent()を呼び出すのが早すぎると、ビューは親ビューにまだ追加されていません。私はコールを遅らせることができ、それを動作させることができました。 – mkjeldsen