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

Posted

技术标签:

【中文标题】向 XML 添加自定义视图...但使用 GENERIC 类型【英文标题】:Adding a custom view to XML... but with a GENERIC-type 【发布时间】:2011-02-15 19:16:49 【问题描述】:

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

public class CustomViewFlipper<someType> extends ViewFlipper  

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

【问题讨论】:

【参考方案1】:

由于类型参数实际上在字节码中被清除,您可以在 XML 中使用类名,就好像它没有参数化一样,然后在 java 代码中将其转换为适当的参数化类型。

考虑上课:

public class CustomViewFlipper<T extends View> extends ViewFlipper  

    //...

在你的活动布局xml中:

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

然后在你的活动中:

@Override
protected void onCreate(Bundle savedInstanceState) 

    //...
    @SuppressWarnings("unchecked")
    CustomViewFlipper<TextView> customFlipper = 
            (CustomViewFlipper<TextView>) findViewById(R.id.customFlipper);

【讨论】:

【参考方案2】:

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

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>

并在您的布局 XML 中使用该类。

【讨论】:

我认为,目前这是正确的答案,所以接受它。谢谢。 @CommonsWare - 您能否详细说明如何在布局 XML 中调用对象?我已经尝试了逻辑&lt;com.mynamespace.TheClassYouPutInTheLayoutFile .../&gt;,但我收到了一个异常Caused by: android.view.InflateException: Binary XML file line #70: Error inflating class ... Caused by: java.lang.NoSuchMethodException: &lt;init&gt; [class android.content.Context, interface android.util.AttributeSet] @CrimsonX:如异常所示,需要实现两参数构造函数TheClassYouPutInTheLayoutFile(Context ctxt, AttributeSet attrs) @CommonsWare - 你是绝对正确的 - 这是我刚刚发现的一个有用的问题,有助于解释更多关于 ***.com/questions/9054894/…的细节【参考方案3】:

我使用这种方法,它对我有用。

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

然后在activity中,如下实例化

    CustomViewFlipper<someType> customFlipper = 
        (CustomViewFlipper<someType>) findViewById(R.id.customFlipper)

【讨论】:

以上是关于向 XML 添加自定义视图...但使用 GENERIC 类型的主要内容,如果未能解决你的问题,请参考以下文章

在集合视图中使用自定义流布局时添加标题

如何以编程方式使用自动布局添加自定义视图

在 Android Studio 中向列表视图添加自定义行

如何使用自定义适配器将整数添加到列表视图

向 ARKit 添加自定义视图

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?