可以在 Android 布局 XML 中传递 Class<> 对象吗?
Posted
技术标签:
【中文标题】可以在 Android 布局 XML 中传递 Class<> 对象吗?【英文标题】:It is possible to pass a Class<> object in Android Layout XML? 【发布时间】:2014-11-20 11:25:02 【问题描述】:我正在构建一个自定义视图,该视图需要一个实体的 Class 对象作为其属性之一。虽然我通过为其添加一个 Setter 使其以编程方式工作,但我想知道是否有任何好的方法可以将其添加到 XML 以进行布局?
“类”类型的样式似乎没有格式选项。我可以使用字符串,但我不得不赌该值实际上是一个有效的类,并且我会失去类型提示,所以它并不理想。
有什么好的方法可以使这项工作,还是我应该坚持以编程方式设置它?
【问题讨论】:
【参考方案1】:方法一(有警告):
通用自定义视图:
public class CustomView<T> extends View
private List<T> typedList = new ArrayList<T>();
public CustomView(Context context)
this(context, null);
public CustomView(Context context, AttributeSet attrs)
this(context, attrs, 0);
public CustomView(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
public void addTypedValue(T object)
typedList.add(object);
public T getTypedValue(int position)
return typedList.get(position);
活动:
//unsafe cast!
CustomView<String> customViewGeneric = (CustomView<String>) findViewById(R.id.customView);
customViewGeneric.addTypedValue("Test");
String test = customViewGeneric.getTypedValue(0);
XML:
<org.neotech.test.CustomView
android:id="@+id/customView"
android:layout_
android:layout_ />
方法2(无警告,安全!):
此方法使用通用的 CustomView。对于将在 xml 中使用的每种类型,您都需要创建一个特定的类。
我添加了一个示例实现:
Generic CustomView:(不要在 xml 中夸大这个):
public class CustomView<T> extends View
private List<T> typedList = new ArrayList<T>();
public CustomView(Context context)
this(context, null);
public CustomView(Context context, AttributeSet attrs)
this(context, attrs, 0);
public CustomView(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
public void addTypedValue(T object)
typedList.add(object);
public T getTypedValue(int position)
return typedList.get(position);
String 类型的 XML 充气视图:
public class CustomViewString extends CustomView<String>
//ADD Constructors!
Integer 类型的 XML 充气视图:
public class CustomViewInteger extends CustomView<Integer>
//ADD Constructors!
活动:
CustomViewString customViewString = (CustomViewString) findViewById(R.id.customViewString);
CustomView<String> customViewGeneric = customViewString;
XML:
<org.neotech.test.CustomViewString
android:id="@+id/customViewString"
android:layout_
android:layout_ />
<org.neotech.test.CustomViewInteger
android:id="@+id/customViewInteger"
android:layout_
android:layout_ />
【讨论】:
以上是关于可以在 Android 布局 XML 中传递 Class<> 对象吗?的主要内容,如果未能解决你的问题,请参考以下文章