1

我有一个扩展 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) 。

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

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

返回空值。

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

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

提前致谢。

4

2 回答 2

1

它确实有效。

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

于 2013-02-23T14:56:09.840 回答
1

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

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

代替

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
于 2013-02-24T14:45:46.280 回答