我有一个自定义活动,可以从XML文件加载图形,其中有很多按钮,图像和文本。
对于实现,我想使用ImageButton
,TextView
和ImageView
之类的android类。
我正在考虑使用List<View>
来循环所有View
对象并膨胀为RelativeLayout
。
最好使用List<View>
或List<ImageButton>
,List<TextView>
和List<ImageView>
吗?
ImageButton
或ImageView
中的方法实现(例如onClick
或其他事件)会在我将其转换为View
对象时丢失吗?
ImageButton imageButton = new ImageButton(getContext());
//Implementation of methods and events...
List<View> list = new ArrayList<View>;
list.add(imageButton);
答案 0 :(得分:1)
该列表仅包含您组件的引用。如果您为示例创建了ImageButton
,请设置点击侦听器并将其添加到List<View>
中,不会丢失任何内容。唯一的事情是您将不知道每个视图的实际类型。
要获取通用View
的真实类,可以使用多个if
语句来检查所有组件类型,例如:
if (view instanceof ImageButton) {
ImageButton imageButton = (ImageButton)view;
}
instanceof检查对象是否属于特定类或对其进行扩展。因此,请确保例如在ImageButton
之前先检查ImageView
,因为它是该类的后代。
答案 1 :(得分:1)
您最大的疑问是
ImageButton或ImageView中的方法实现(例如onClick或其他事件)会在我将其转换为View对象时丢失吗?
不,这不会发生。
考虑两个课程
class Parent{
void big(){}
}
和
class Child extends Parent{
void small(){}
}
如果你说
Child c = new Child();
然后您就可以使用
c.big();
和c.small();
但是如果你说
Parent c = new Child();
您被允许使用
c.big();
但是要在small()
类内调用Child
您需要投射
Child ch = (Child)c;
ch.small();
现在,如果存在多个子类,每个子类都可以使用不同的方法,其中
例如Child1
与small1()
以及Child2
与small2()
等,然后您可以使用instanceof
进行投射
喜欢
if(ch1 instanceof Child1)
{
Child1 c1 = (Child1)ch1;
c1.small1();
}
if(ch2 instanceof Child2)
{
Child2 c2 = (Child2)ch2;
c2.small2();
}