Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在将自定义视图添加到XML。。。但是使用泛型类型_Android_Xml_Generic Programming_Type Parameter - Fatal编程技术网

Android 正在将自定义视图添加到XML。。。但是使用泛型类型

Android 正在将自定义视图添加到XML。。。但是使用泛型类型,android,xml,generic-programming,type-parameter,Android,Xml,Generic Programming,Type Parameter,我正在开发一个自定义视图,希望可以重用。它应该有一个泛型类型,如下所示: public class CustomViewFlipper<someType> extends ViewFlipper { } 公共类CustomViewFlipper扩展了ViewFlipper{} 我知道如何将普通自定义视图绑定到XML文件。但我找不到这种情况的任何例子。有没有办法在XML中定义类的泛型类型?我不这么认为,但您可以创建自己的子类: public class TheClassYouPut

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

public class CustomViewFlipper<someType> extends ViewFlipper { }
公共类CustomViewFlipper扩展了ViewFlipper{}

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

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

public class TheClassYouPutInTheLayoutFile extends CustomViewFlipper<someType>
public类您输入的类布局文件扩展了CustomViewFlipper

并在布局XML中使用该类。

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

考虑上课:

public class CustomViewFlipper<T extends View> extends ViewFlipper { 

    //...
公共类CustomViewFlipper扩展了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);
@覆盖
创建时受保护的void(Bundle savedInstanceState){
//...
@抑制警告(“未选中”)
CustomViewFlipper customFlipper=
(CustomViewFlipper)findViewById(R.id.customFlipper);

我使用这种方法,它适合我

    <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)
CustomViewFlipper customFlipper=
(CustomViewFlipper)findViewById(R.id.customFlipper)

我认为,目前这是正确的答案,所以接受它。谢谢。@commonware-你能详细介绍一下如何在布局XML中调用对象吗?我尝试了逻辑
,但我收到了一个异常
,原因是:android.view.InflateException:Binary-XML文件行#70:错误膨胀类…原因是:java.lang.nosuchmethododException:[class android.content.Context,interface android.util.AttributeSet]
@CrimsonX:如异常所示,您需要实现两个参数的构造函数
classyouputinethelayoutfile(Context ctxt,AttributeSet attrs)
@commonware-你说得完全正确-我刚刚发现了一个有用的问题,它有助于解释更多的细节