无法从自定义视图访问元素

时间:2018-07-14 20:36:30

标签: java android layout

我有一个自定义的LinearLayout。它包含一个TextBox和其他一些元素。

<a.b.c.CustomLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
>
    <TextView
    android:id="@+id/txtTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    />
</a.b.c.CustomLinearLayout>

我有一个以下类,尝试从该类中通过以​​下方式访问txtTitle元素:

public class CustomLinearLayout extends LinearLayout 
{
    public CustomLinearLayout( Context context, AttributeSet attrs ) 
    {
        super( context, attrs );

        TextView txtTitle = (TextView)findViewById( R.id.txtTitle );
    }
}

但是txtTitle始终为null。我也试图这样访问它,但是没有运气:

    TextView txtTitle = (TextView)this.findViewById( R.id.txtTitle );
    TextView txtTitle = (TextView)((Activity)context).findViewById( R.id.txtTitle );
    TextView txtTitle = (TextView)context.findViewById( R.id.txtTitle );

如何从上下文访问TextView?谢谢!

1 个答案:

答案 0 :(得分:1)

您无法在Constructor()期间访问子级,因为尚未加载和从XML中读取它们。 LinearLayout.Constructor()是在解析XML时调用的第一个方法,并且只有在所有子元素都被读取/解析之后才被调用,因此在Constructor()期间它们是不可访问的/可见的/ ready_to_use。

请使用:

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
}