通过活动中的xml声明的id获取自定义视图的引用

时间:2013-02-23 14:51:06

标签: android android-layout view reference

我有一个扩展ImageView的自定义视图,我在这样的XML布局中使用它:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp">

        <com.android.example.MyView
            android:id="@+id/myview1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp" />

        <com.android.example.MyView
            android:id="@+id/myview2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp" />

    </LinearLayout>

</LinearLayout>

在我的活动中我按照惯例执行:setContentView(R.layout.myLayout)。

现在,我需要获取我的类/ View“MyView”的引用以设置自定义侦听器,但我无法从id中获取它。

myview (MyView) findViewById(R.id.myview1);

返回null。

我试图查看类似的问题,但没有发现任何帮助我。

请注意,如果我从Activity中以编程方式将View添加到布局中,一切正常,但我希望能够找到问题所在。

提前致谢。

2 个答案:

答案 0 :(得分:1)

确实有效。

您用于setContentView的布局必须与添加自定义视图的布局相同。

答案 1 :(得分:1)

我发现问题是一个愚蠢的剪切和粘贴错误,我忘记在调用super()时添加AttributeSet

public MyView(Context context, AttributeSet attrs) {
    super(context);
}

而不是

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
}