findViewById() returns null for custom component in layout XML, not for other components

转自:http://stackoverflow.com/questions/1691569/findviewbyid-returns-null-for-custom-component-in-layout-xml-not-for-other-co


I have ares/layout/main.xmlincluding these elements and others:

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

In my Activity's onCreate,I do this:

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

The other elements are found successfully,butfoocomes back null. MyCustomView has a constructorMyCustomView(Context c,AttributeSet a)and aLog.d(...)at the end of that constructor appears successfully in logcat just before the "epic fail".

Why isfoonull?



解决方法

Because in the constructor,I hadsuper(context)instead ofsuper(context,attrs).

Makes sense,if you don't pass in the attributes,such as the id,then the view will have no id and therefore not be findable using that id. :-)

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念