1. ホーム
  2. xml

[解決済み] findViewById()はレイアウトXMLのカスタムコンポーネントに対してはnullを返し、他のコンポーネントに対しては返さない。

2023-02-14 13:24:36

質問

私は res/layout/main.xml にはこれらの要素やその他の要素が含まれています。

<some.package.MyCustomView android:id="@+id/foo" (some other params) />
<TextView android:id="@+id/boring" (some other params) />

私のActivityのonCreateでは、このようにしています。

setContentView(R.layout.main);
TextView boring = (TextView) findViewById(R.id.boring);
// ...find other elements...
MyCustomView foo = (MyCustomView) findViewById(R.id.foo);
if (foo == null) { Log.d(TAG, "epic fail"); }

他の要素は正常に見つかりますが foo はnullで戻ってきます。MyCustomViewはコンストラクタ MyCustomView(Context c, AttributeSet a)Log.d(...) が正常に表示されます。

なぜ foo はヌルなのか?

どのように解決するのですか?

というのも、コンストラクタの中で super(context) ではなく super(context, attrs) .

もしidなどの属性を渡さなければ、ビューはidを持たないので、そのidを使って検索することができません :-)