2011-04-12 28 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()); 
     } 
    } 
相關問題