【问题标题】:findViewById() from custom view return null自定义视图中的 findViewById() 返回 null
【发布时间】:2014-09-14 18:28:39
【问题描述】:

这似乎与其他问题相似,但我没有找到解决方案。我有一个由 xml 文件定义的布局:

ma​​in_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 的方法中,我会得到一个空指针。为什么?

【问题讨论】:

    标签: android android-activity view findviewbyid


    【解决方案1】:

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

    在一个活动中,findViewById() 遍历开始的根视图是活动窗口(@98​​7654323@)。在视图中,它是视图本身 (View.findViewById())。

    【讨论】:

      【解决方案2】:

      理解上面有用的解释我想提供一个简单的方法来通过其 ID 从CustomViews 查找视图:

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

      在您的 CustomView 类中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多