안드로이드(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;
}
}
claAutoCompleteTextView acTest1
= new claAutoCompleteTextView(this, (AutoCompleteTextView)findViewById(R.id.acTest1), strData1);
데이터도 이 클래스에 저장하고 싶으면 생성자에서 아이탬을 클론으로 받아와야 예상하지 못한 동작을 막을수 있습니다.
AutoCompleteTextView의 자체 버그인지는 모르겠지만 처음 뷰가생성되고 아무런 값이 없을때 AutoCompleteTextView에 접근하려고하면 에러가 나는 경우가 있습니다. 이 현상을 막기위해 생성자에서 초기값이나 빈값을 지정해줄 필요가 있습니다.