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-你说得完全正确-我刚刚发现了一个有用的问题,它有助于解释更多的细节