从自定义视图调用findViewById返回null

时间:2016-07-25 11:55:44

标签: java android xml

我正在创建一个自定义类,它应该以某种方式显示两个图像。以下是我的代码的一些选定部分:

我的XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    <com.kupol24.app.presentation.view.customViews.MyImageLayout
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/pattern"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/start_pattern"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"/>

        <ImageView
            android:id="@+id/logo"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/start_logo"
            android:layout_centerInParent="true"
            android:layout_centerVertical="true"/>
    </com.kupol24.app.presentation.view.customViews.MyImageLayout>

</RelativeLayout>

班级本身:

public class MyImageLayout extends RelativeLayout {

    private ImageView patternImage, logoImage;
    private Bitmap pattern, logo;

    public MyImageLayout (Context context, AttributeSet attrs) {
        super(context, attrs);

        patternImage = (ImageView) findViewById(R.id.pattern);
        logoImage = (ImageView) findViewById(R.id.logo);

        pattern = ((BitmapDrawable) patternImage.getDrawable()).getBitmap();
        logo = ((BitmapDrawable) logoImage.getDrawable()).getBitmap();

        pattern = Bitmap.createScaledBitmap(pattern, patternDiameter, patternDiameter, false);
        logo = Bitmap.createScaledBitmap(logo, logoDiameter, logoDiameter, false);
    }
}

我得到的问题是findViewById返回null,而不是给我ImageView。我该如何解决这个问题?谢谢

1 个答案:

答案 0 :(得分:3)

  

我得到的问题是findViewById返回null,而不是   给我ImageView。我该如何解决这个问题?

您无法保证已添加自定义布局的子项。 ViewGroup具有onFinishInflate回调,正如文档所述,在添加所有子视图后,它被称为通胀的最后阶段。覆盖此回调,并在那里移动findViewById来电