15

再利用性を期待してカスタムビューに取り組んでいます。次のようなジェネリック型が必要です。

public class CustomViewFlipper<someType> extends ViewFlipper { }

通常のカスタム ビューを XML ファイルにバインドする方法を知っています。しかし、この状況の例は見つかりませんでした。XML でクラスのジェネリック型を定義する方法はありますか?

4

3 に答える 3

10

型パラメーターは実際にはバイトコードで消去されるため、XML でクラス名をパラメーター化されていないかのように使用し、Java コードで適切なパラメーター化された型にキャストできます。

クラスを持つことを検討してください:

public class CustomViewFlipper<T extends View> extends ViewFlipper { 

    //...

そしてあなたの活動レイアウトxmlで:

<view 
    class="com.some.package.CustomViewFlipper"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/customFlipper"/>

次に、あなたの活動で:

@Override
protected void onCreate(Bundle savedInstanceState) {

    //...
    @SuppressWarnings("unchecked")
    CustomViewFlipper<TextView> customFlipper = 
            (CustomViewFlipper<TextView>) findViewById(R.id.customFlipper);
于 2012-07-03T16:53:42.753 に答える
9

そうは思いませんが、独自のサブクラスを作成できます。

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>

そのクラスをレイアウト XML で使用します。

于 2011-02-15T20:22:31.377 に答える
-1

私はこのアプローチを使用していますが、私にとってはうまくいきます。

    <com.some.package.CustomViewFlipper
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/customFlipper"/>

そして、アクティビティで、以下のようにインスタンス化します

    CustomViewFlipper<someType> customFlipper = 
        (CustomViewFlipper<someType>) findViewById(R.id.customFlipper)
于 2015-12-10T14:23:36.623 に答える