2011-04-12 68 views
2

基本上,我有保持水平LinearLayouts的随机量的的LinearLayout,并且在每个水平LinearLayouts的有一个TextView和一个EditText。我希望能够获得主LinearLayout的每个EditText子项的值。Android开发:如何获取ViewGroup的所有EditText子项?

很抱歉,如果它的混乱,我不擅长解释的事情!

我能不能设置相同的ID为每个EditTexts的再使用findViewById,或将只返回一个EditText的第一个实例?

谢谢, Alex。

回答

1

您需要调用findViewById在每个LinearLayouts的。如果你这样做,你可以为每个EditText设置相同的ID。

+0

谢谢,这有帮助,但现在的问题是如何获得EditTexts的文本?我试过的getText(),但它不工作,因为我指的EditText是查看 – AlexPriceAP 2011-04-12 17:05:29

+0

调用((EditText上)linearLayout.findViewById(R.id.someId))。gettext的()。的toString() – James 2011-04-12 18:08:32

+0

它强制关闭NullPointerException :( – AlexPriceAP 2011-04-12 18:58:41

2

findViewById仅返回指定id的第一个视图。你将不得不自己遍历视图层次,至少直到你看到每个水平线性布局。你会发现有用的方法ViewGroup.getChildCount()ViewGroup.getChildAt(int)

+0

由于每个子视图也是视图的一个实例,findViewById可以在只能遍历子布局的子布局上调用 – James 2011-04-12 16:42:38

+0

@James - 是的,我认为这就是我说的。 – 2011-04-12 21:38:36

+0

如果找到的视图是ViewGroup的一个实例,可能迭代这些孩子。这样,您可以深入查看完整的视图层次结构,并且唯一必须了解的是您的根布局ID。我不确定这种方法的性能后果如何。如果它没有太多的工作,你应该使用詹姆斯的答案。这样就可以在稍后以一种简单且良好的表现方式对所有文本视图进行调整。 – Jordi 2012-01-06 16:55:50

6
LinearLayout ll = //Your Layout this can be any Linear or Relative layout 
        //in which you added your spinners at runtime ; 

    int count = ll.getChildCount(); 
    for(int i =0;i<count;i++) 
    { 
     View v = ll.getChildAt(i); 
     if(v instanceof Spinner) 
     { 
      // you got the spinner 
      EditText s = (EditText) v; 
      Log.i("Item selected",s.getText().toString()); 
     } 
    } 
相关问题