我正在开发一个自定义视图,希望可重用。它应该具有泛型类型,如下所示:
public class CustomViewFlipper<someType> extends ViewFlipper { }
我知道如何将普通的自定义视图绑定到XML文件。但我找不到这种情况的任何例子。有没有办法在XML中为类定义泛型类型?
答案 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)