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);

null を返します。

私は同様の問題を見ようとしましたが、私を助けたものは見つかりませんでした。

アクティビティからプログラムでビューをレイアウトに追加すると、すべて正常に動作しますが、ここで何が問題なのかを見つけたいと思います。

前もって感謝します。

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 に答える