自定义视图中的findViewById()返回null

时间:2014-09-14 18:28:40

标签: android android-activity view findviewbyid

它似乎与其他问题相似,但我找不到解决方案。我有一个由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的方法中,我得到一个空指针。为什么呢?

2 个答案:

答案 0 :(得分:1)

findViewById()将仅遍历给定视图及其子视图。它不会找到兄弟姐妹的观点。您的textview是自定义视图的兄弟,而不是子视图。

在活动中,findViewById()遍历开始的根视图是活动窗口(Activity.findViewById())。在视图中,它是视图本身(View.findViewById())。

答案 1 :(得分:0)

理解上面的有用解释我想通过CustomViews的ID来轻松查找视图:

(Activity)getContext()).findViewById(R.id.youViewToBeFound);

CustomView课程内。

此代码必须在构造函数代码之后运行,例如在onAttachedToWindow()