2011-02-23 7 views
0

단위 변환을 위해 두 개의 편집 텍스트 상자를 함께 연결할 수있는 확장 가능한 방법을 찾고 있습니다. 사용자는 상자 중 하나에 값을 입력하고 변환 된 값이 다른 상자에 표시됩니다.단위 변환을 위해 두 개의 편집 텍스트 상자 연결하기

하나의 EditText를 편집 할 때 입력을 얻고 값을 변환하고 다른 필드의 텍스트를 설정하는 방법을 통해 전달합니다.

문제는이 쌍이 많아서 각 쌍이 다른 종류의 단위를 변환하는 데 사용된다는 것입니다. 각 상자에 대해 TextWatcher를 사용하면 어디에서 벗어날 수 있는지 알 수 있습니다.

나는 EditText View와 그 파트너의 뷰를 전달할 수 있도록 TextWatcher를 확장하려고 생각했지만, 어떤 종류의 변환 메소드를 사용해야 하는지를 잘 모르겠습니다. 각 종류의 변환에 int를 할당하고 스위치를 사용할 수는 있지만 좋은 해결책은 아닌 것 같습니다.

더 좋은 방법이 있습니까?

답변

0

이렇게하면됩니다. 참조 번호와 EditText obj를 포함하는 클래스 (예 : PartnerEditTextInfo)를 만듭니다. 이것을 앱의 모든 EditText에 태그로 붙이십시오. PartnerEditTextInfo의 editText를 파트너 editText로 설정하고 고유 한 참조 번호가 있어야합니다. 따라서 모든 EditText는 파트너를 확보 할 수 있습니다.

EditText 클래스를 확장하고 onTextChanged() 메서드를 오버라이드하여 일반적인 변환 방법을 호출합니다 (정적 클래스 정적 메서드가 될 수 있음). 텍스트가 변경된 editText의 태그 객체를 가져 와서 editText 파트너를 가져올 수 있습니다. 그런 다음 (참조 번호를 기반으로하는) editText 쌍을 기반으로하여 필요한 변환 수식을 적용하고 쌍의 editText에서 setText를 수행합니다.

주의 - 무한 루프가 발생하지 않도록하고, 사용자가 만든 editText의 텍스트와 변경 방법을 구분하는 플래그를 지정해야합니다.

+0

감사합니다. 시험해 보겠습니다. – Matt

+0

내가 제안한 태그를 사용하여 종료되었습니다. 이 태그에는 editText의 단위, 파트너 및 최소/최대 값과 포매팅을위한 문자열 값이 저장됩니다. 위와 같이 청취자를 포함하여 edittext에 모든 것을 할당하는 메서드가 있습니다. 리스너는 editText의 태그를 읽는 convert 메소드를 호출하고 입력 단위를 기반으로 전환합니다. 스위치는 footTo (input, unit)와 같은 변환을위한 적절한 메소드를 선택하고 변환하는 단위에 따라 해당 메소드가 전환됩니다. convert 메소드는 값을 설정하고 모든 사람이 만족합니다. 도와 주셔서 감사합니다! – Matt

관련 문제