【问题标题】:android pass array of widgets to another class and iterate over them to change propertiesandroid将小部件数组传递给另一个类并遍历它们以更改属性
【发布时间】:2011-08-01 01:54:10
【问题描述】:

对于 android 来说还是太新了,从 Object-C 开始的 minset 是微不足道的。

我有一个带有几个小部件的 A 类

还有一个 => B 类扩展了 TextView

A 类使用 B 类的实例。

当在 B 类中输入文本时,我想遍历 A 中不同类型(微调器、文本视图等)但具有共同属性 setVisibility 的小部件数组,并对其进行更改

所以在 A 类中,在创建字段成员 B 类之后,我将一个带有两个小部件的对象数组传递给它(到 B 类)

所以,天真地,我尝试了几种带有强制转换的 for 循环变体,例如(到目前为止只没有给出错误,但是有一个问题:

        for (Object o : hidObj) 
        {

            Class c=o.getClass(); //.setVisibility=1;
            if (c.getSuperclass()==android.view.View.class){};
        }

问题:在这种情况下,hidObj 数组包含 TextView 和一个 Spinner(我希望它适用于其他活动)

但是 文本视图:

java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView

当微调器:

java.lang.Object
   ↳    android.view.View
       ↳    android.view.ViewGroup
           ↳    android.widget.AdapterView<T extends android.widget.Adapter>
               ↳    android.widget.AbsSpinner
                   ↳    android.widget.Spinner

这样就不行了。

Android/Java 专家有什么建议吗?

在此先感谢

大卫

【问题讨论】:

    标签: android class android-widget compare extends


    【解决方案1】:

    在这种特殊情况下,您要调用的常见setVisibility() 方法很常见,因为它是由View 的小部件继承的。您应该利用标准 Java 语言和继承,因此:

    View view;
    view = findViewById(R.id.somename); // Can be any kind of View (TextView, Spinner, etc).
    view.setVisibility(true); // or false depending on your needs.
    

    现在,如果您想检查您不知道其层次结构的任何特定对象,那么您必须使用反射。见Using Java Reflection;您将对“按名称调用方法”部分感兴趣。

    【讨论】:

      【解决方案2】:
      • setVisibility 是 View 类中的一个方法。
      • TextView 扩展视图
      • 微调器扩展视图

      ->传递一个View数组,数组中的每一项都有setVisibility方法

      你不需要投射

      【讨论】:

      • 大家好,我忘了回答这个问题,我正忙着更新我的 iOS 应用程序。本周将尝试并标记为已回答,如果我能解决的话。
      猜你喜欢
      • 2016-10-02
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      相关资源
      最近更新 更多