List <view>是否值得?

时间:2019-03-25 10:21:03

标签: java android android-view

问题

我有一个自定义活动,可以从XML文件加载图形,其中有很多按钮,图像和文本。

我的实施计划

对于实现,我想使用ImageButtonTextViewImageView之类的android类。

我正在考虑使用List<View>来循环所有View对象并膨胀为RelativeLayout

我的疑问

最好使用List<View>List<ImageButton>List<TextView>List<ImageView>吗?

ImageButtonImageView中的方法实现(例如onClick或其他事件)会在我将其转换为View对象时丢失吗?

我计划的代码示例:

ImageButton imageButton = new ImageButton(getContext());

//Implementation of methods and events...
List<View> list = new ArrayList<View>;
list.add(imageButton);

2 个答案:

答案 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();

现在,如果存在多个子类,每个子类都可以使用不同的方法,其中 例如Child1small1()以及Child2small2()等,然后您可以使用instanceof进行投射

喜欢

if(ch1 instanceof Child1)
{   
    Child1 c1 = (Child1)ch1;
    c1.small1();
}
if(ch2 instanceof Child2)
{
    Child2 c2 = (Child2)ch2;
    c2.small2();
}