它似乎与其他问题相似,但我找不到解决方案。我有一个由xml文件定义的布局:
main_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
... >
<package.CustomView
... >
</package.CustomView>
<TextView
android:id="@+id/text_view"
... >
</TextView>
</RelativeLayout>
其中CustomView扩展了SurfaceView。
在onCreate中我有setContentView(R.layout.main_layout)。现在,如果我想要膨胀,例如,我必须在setContentView(...)之后添加活动中的TextView
TextView textView = (TextView) findViewbyId(R.id.text_view);
一切正常。但是如果我把这行放在我的CustomView的方法中,我得到一个空指针。为什么呢?
答案 0 :(得分:1)
findViewById()
将仅遍历给定视图及其子视图。它不会找到兄弟姐妹的观点。您的textview是自定义视图的兄弟,而不是子视图。
在活动中,findViewById()
遍历开始的根视图是活动窗口(Activity.findViewById()
)。在视图中,它是视图本身(View.findViewById()
)。
答案 1 :(得分:0)
理解上面的有用解释我想通过CustomViews
的ID来轻松查找视图:
(Activity)getContext()).findViewById(R.id.youViewToBeFound);
在CustomView
课程内。
此代码必须在构造函数代码之后运行,例如在onAttachedToWindow()