【问题标题】:Loop through all "widgets"/elements in a Activity循环遍历 Activity 中的所有“小部件”/元素
【发布时间】:2010-11-16 13:49:09
【问题描述】:

几天前我开始了自己的安卓应用程序,因为我需要一个移动应用程序来存储我在医院收集的大量数据。

我对 Java 和 android 环境还很陌生,虽然它看起来很容易理解并且与 C++ 非常相似。

无论如何,我的应用程序有一堆“EditText”和单选按钮,我的问题是:

如何遍历所有这些小部件(EditTexts 和单选按钮)?

在 .NET 中,您可以执行“针对容器中的每个元素”循环,但我似乎无法在 Java/android 环境中找到执行此操作的方法。

注意:我不知道活动中存在多少“小部件”,因为有些是动态创建的,有些是硬编码的,还有一些显示是否设置了某些用户首选项

任何帮助或提示将不胜感激。

【问题讨论】:

    标签: java android for-loop widget


    【解决方案1】:
    for (int i = 0; i < rootView.getChildCount(); i++)
      rootView.getChildAt(i)
    

    请注意,这将返回 View-s,您必须在运行时准确检查您当前正在查看的 View 类型

    【讨论】:

    • 有趣。但起点是一项活动。因此,您的演示缺少从活动到 rootView 的步骤 ;-) — 我自己可能可以弄清楚,但它会很好。
    【解决方案2】:

    有效。

    关于 View 类型(即 Spinner、radioButton、EditText 等),我们可以在 Layout XML 文件中标记我们要解析的每种类型,然后添加条件,即:

       if (Widget_Tag != null){   
    
          View Current_Widget = (View) rootView.getChildAt(i);          
    
          String Widget_Tag = (String) Current_Widget.getTag();
    
          if (Widget_Tag.equals("MyEdiText")) {
    
            //do something
    
          }
       }
    

    if (Widget_Tag != null){ 是为了防止 NullPointReferences。你也可以用 Try / Catch 来做。

    【讨论】:

    • 就像我对应用程序说的:rootView 来自哪里。
    【解决方案3】:

    你可以试试这个代码:

    LayoutInflater inflater = getLayoutInflater();
    LinearLayout l = (LinearLayout) inflater.inflate(R.layout.main, null);
    
    ViewGroup Current_Widget = (ViewGroup)l.getRootView();
    
    for (int i = 0; i < Current_Widget.getChildCount(); i++)
        Current_Widget.getChildAt(i);
    

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多