2011-04-12 9 views
2

기본적으로 나는 임의의 양의 수평 LinearLayouts를 보유하는 LinearLayout을 가지고 있으며, 각각의 수평 LinearLayouts에는 TextView와 EditText가 있습니다. 마스터 LinearLayout의 각 EditText 하위의 값을 가져올 수 있어야합니다.Android 개발 : ViewGroup의 모든 EditText 하위를 얻는 방법?

죄송합니다. 혼란 스럽다면, 나는 잘 설명하지 못합니다!

각 EditText에 대해 동일한 ID를 설정 한 다음 findViewById를 사용하거나 EditText의 첫 번째 인스턴스 만 반환 할 수 있습니까?

감사합니다. 알렉스.

답변

1

각 LinearLayouts에서 findViewById를 호출해야합니다. 이렇게하면 각 EditText에 대해 동일한 ID를 설정할 수 있습니다.

+0

감사합니다. 도움이되었지만 지금은 문제가 어떻게 EditTexts 텍스트를 얻습니까? 나는 getText()를 시도했지만 참조 된 EditText가 – AlexPriceAP

+0

호출 ((EditText) linearLayout.findViewById (R.id.someId)). getText(). toString() – James

+0

입니다. 그것은 강제로 닫습니다 NullPointerException :( – AlexPriceAP

2

findViewById은 주어진 ID로 첫 번째보기 만 반환합니다. 최소한 각 수평 선형 레이아웃에 도달 할 때까지 직접 뷰 계층을 트래버스해야합니다. 이 경우 유용한 ViewGroup.getChildCount()ViewGroup.getChildAt(int) 메서드를 찾을 수 있습니다.

+0

각 하위 뷰는 뷰의 인스턴스이기도하므로 – James

+0

@James - 예, 그렇게 말한 것 같습니다. 그 아이들을 반복 할 수 있습니다. 이렇게하면 전체 뷰 계층 구조를 드릴 다운 할 수 있으며 루트 레이아웃 ID 만 알아야합니다. 이 메서드에 대한 성능 결과가 무엇인지 잘 모르겠습니다. 많은 일을하지 않으면 제임스의 대답을 사용해야합니다. 이렇게하면 나중에 모든 텍스트 뷰를 쉽고 좋은 방법으로 적용 할 수 있습니다. –

+0

발견 된 뷰가 ViewGroup의 인스턴스 인 경우 findViewById는 하위 레이아웃에서만 실행될 수 있습니다. – Jordi

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()); 
     } 
    }