将自定义视图添加到XML ...但使用GENERIC类型

时间:2011-02-15 19:16:49

标签: android xml generic-programming type-parameter

我正在开发一个自定义视图,希望可重用。它应该具有泛型类型,如下所示:

public class CustomViewFlipper<someType> extends ViewFlipper { }

我知道如何将普通的自定义视图绑定到XML文件。但我找不到这种情况的任何例子。有没有办法在XML中为类定义泛型类型?

3 个答案:

答案 0 :(得分:9)

由于类型参数实际上是以字节码清除的,因此您可以在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);

答案 1 :(得分:6)

我不这么认为,但你可以创建自己的子类:

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>

并在布局XML中使用该类。

答案 2 :(得分:-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)