프로그래밍/Java, Android
안드로이드 뷰 캡슐화 전략 - AutoCompleteTextView
당근천국
2011. 4. 18. 11:24
안드로이드(android) 뷰 캡슐화를 통한 자동완성 택스트뷰를 만들기위한 코드입니다,
자동완성 택스트뷰같은경우 데이터바인딩만 하면 혼자 작동하기때문에 별로 어렵진 않습니다 ㅎㅎㅎ
|
1. claAutoCompleteTextView |
package ViewControl; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.TextSwitcher; /** * claAutoCompleteTextView * * @author DangGun Roleeyas ( http://blog.danggun.net ) * @version 1.0 ( 2010.11.28 ) * * 오토 컴플리트 텍스트 뷰 * * 이 클래스는 그대로 사용하지 말고 복사해서 사용해야 합니다. * 이 클래스는 뷰들의 세팅작업을 한번에 완료하고 제어하는데 목적이 있습니다. * * 클래스 자체적으로 뷰객체를 저장하고 있으므로 외부에서는 이 클래스의 객체만 생성해서 사용하세요. * GetOvject() 메소드를 통해 저장되있는 객체에 직접 접근 할수 있습니다. * * 복사한후 자신이 사용하려는 동작을 할수 있게 직접 수정하셔야 합니다. * 이 클래스의 내용은 참고용으로 사용 하시기 바랍니다. * * 자동완성텍스트뷰를 제어하기 위한 리스너 클래스입니다. * 데이터 제어는 여기서 하지 않고 데이터를 제어하기위한 인터페이스만 제공합니다. * * 만약 오토 컴플리트 텍스트 뷰가 여러개이면 이 클래스도 여러개 생성해야 합니다.(일반 리스너와 동일, ) * */ public class claAutoCompleteTextView extends TextSwitcher { ArrayAdapterstrACAdapter; AutoCompleteTextView acView; /** * 생성자 * * 오토 컴플리트 텍스트 뷰에 아답터를 연결한후 제어할 리스너를 연결합니다. * 연결할 데이터를 미리 설정해놓는 방식은 데이터를 정적일때 사용합니다. * * 연결할 데이터가 동적이라면 * 데이터를 갱신해주는 클래스를 받아서 afterTextChanged()를 호출할때마다 갱신되게 해야 합니다. * * @param context 메인 뷰 * @param acView 이 클래스 내에 객체가 저장되므로 객체를 따로 저장 하실 필요는 없습니다. * @param items[] 연결할 데이터 */ public claAutoCompleteTextView(Context context, AutoCompleteTextView acView, String items[]) { super(context); this.acView = acView; //아답터 생성 strACAdapter = new ArrayAdapter( context, android.R.layout.simple_dropdown_item_1line, items); //아답터 연결 this.acView.setAdapter(strACAdapter); //리스너 등록 this.acView.addTextChangedListener( twTextChanged); } //텍스트가 변경되었을때 사용할 리스너 생성 private TextWatcher twTextChanged = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }; /** * @return 이 클래스가 소유하고 있는 객체를 리턴합니다. */ public AutoCompleteTextView GetOvject() { return this.acView; } }
|
2. 사용법 |
claAutoCompleteTextView acTest1 = new claAutoCompleteTextView(this, (AutoCompleteTextView)findViewById(R.id.acTest1), strData1);
|
3. 주의사항 |
AutoCompleteTextView의 자체 버그인지는 모르겠지만 처음 뷰가생성되고 아무런 값이 없을때 AutoCompleteTextView에 접근하려고하면 에러가 나는 경우가 있습니다. 이 현상을 막기위해 생성자에서 초기값이나 빈값을 지정해줄 필요가 있습니다.