2010-12-20 4 views
1

내 Android 애플리케이션의 경우 사용자가 더하기 버튼을 클릭하여 EditText 필드를 추가하고 EditText 필드 옆에 빼기 버튼을 추가하여보기에서 삭제할 수있게하려는보기가 필요합니다. 본질적으로, Android의 수정 연락처 인터페이스에서 여러 전화 번호/이메일 주소를 추가하는 것과 매우 유사합니다.안드로이드 - 여러 EditText 필드가있는 뷰를 팽창시키고 값을 읽는 방법?

나는 EditText와 매번 추가 할 버튼이 포함 된 별도의 메인 뷰를 사용하여 메인 뷰를 부 풀릴 필요가 있다고 생각한다. 그러나 각 EditText와 버튼을 고유 한 ID로 식별하는 방법을 잘 모르기 때문에 데이터베이스에 저장하기 위해 각 EditText의 값을 가져 오는 방법을 모릅니다. 누군가 내가해야 할 일에 대해 조언 할 수 있습니까? 고맙습니다.

답변

2

하위 레이아웃을 확장 한 경우 이제 View 개체를 가져야합니다.

하위 레이아웃 XML에 ID를 제공했다고 가정하면 View —에 findViewById(R.id.edit_text_1)을 호출 할 수 있습니다.

각 부모 View을 추적하는 한 항상 findViewById()을 사용할 수 있습니다. 아니면 인플레이션 이후에 setId()을 사용하여 각 EditText에 새 고유 한 글로벌 고유 ID를 설정할 수 있습니다.

+0

하위 레이아웃에 여러 개의 EditText를 서로 옆에 배치하고 RelativeLayout으로 싸서 "layout_below", "layout_toRightOf"와 같은 레이아웃 속성을 사용하면 어떨까요? 모든 EditText의 ID를 변경할 때 이러한 속성을 수정해야합니까? – Keeb13r

+0

그리고 요소의 ID로 문자열을 설정할 수있는 방법이 없습니까? "setId()"는 int를 인수로 받아 들일 수 있다는 것은 반 직관적 인 것처럼 보입니다. – Keeb13r

+0

ID로 문자열에 * 참조를 설정할 수 있지만 런타임에 정의 된 임의의 문자열은 설정할 수 없습니다. 그러나 다시 한번, 나는 ID를 바꿀 필요가 없다고 생각합니다. 어쨌든 부모 뷰를 추적하는 한, 자식의 ID를 다시 설정할 필요가 없습니다. –

0

뷰 위젯을 동적으로 할당하고 할당 된대로 고유 한 ID를 생성 할 수 있습니다.

Button b = new Button(this); 
b.setId(myId); 

그런 다음 해당 위젯을 다시 참조 할 수 있습니다.

findViewById(myId); 
+0

[이 예를 따르기를 원한다고 가정 해 봅니다 (http://stackoverflow.com/questions/4299924/inflating-a-view-multiple-times-in-theame-parent-when-a-button). 클릭). 추가 버튼을 클릭하면 래퍼보기가 이미 하위보기로 확장되었습니다. 자, 아마도이 새로운 요소의 ID를 인플레이터에서 이미 생성했기 때문에 어떻게 설정합니까? (따라서 "Button b = new Button (this)"는 불필요합니다)? 또는 데이터 저장 용도로 어떻게 참조 할 수 있습니까? – Keeb13r

관련 문제