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 回答