안녕하세요.
검색 버튼 없이, editText에 원하는 검색 단어를 입력하면 리스트뷰에 바로 보여주도록 만들고 있습니다..
일단 맨 처음 실행할 때, 리스트뷰에는 회원들의 이름들이 나열되어 있습니다.
김누구
박누구
최누구
이런식으로..
editText에 '최'를 검색하면 최누구가 리스트뷰에 새로 나오는데, 이 리스트 항목을 클릭하면 김누구로 나오네요..
검색결과를 갱신?해야하는건지, 리스트뷰가 인식을 못하고 맨 첫번째 회원인 김누구로만 나옵니다.
인터넷의 주소록 예제와 검색 예제를 합쳐서 검색자체는 되는데, 검색 된 이후의 리스트뷰가 먹통입니다.;
조언부탁드립니다 감사합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addressbook);//주소록
btnok = (Button)findViewById(R.id.addressOk);
btncan = (Button)findViewById(R.id.addressCan);
search = (EditText)findViewById(R.id.search);
btnok.setOnClickListener(this);
btncan.setOnClickListener(this);
Cursor cursor = getURI(); // 전화번호부 가져오기
int end = cursor.getCount(); // 전화번호부의 갯수 세기
name = new String[end]; // 전화번호부의 이름을 저장할 배열 선언
String[] bbStr = cursor.getColumnNames();
for(int i=0; i<bbStr.length;i++)
// 각각의 컬럼 이름 확인
Log.e(tag, "ColumnName " + i + " : " + cursor.getColumnName(i));
if(cursor.moveToFirst()) { //항상 처음에서 시작
do {
if(!cursor.getString(2).startsWith("01")) // 01로 시작하는 핸펀만
continue; // 이멜주소만 있는것은 제외
// 요소값 얻기
name[count] = cursor.getString(1); //이름
name[count] += "\n";
name[count] += cursor.getString(2); //전번
count++;
} while(cursor.moveToNext());
new_name = new String[count]; //이멜주소 제외한 01번호 가져오기
for(int i=0; i<count; i++) new_name[i] = name[i]; //복사
}
cursor.close(); // 반드시 커서 닫고
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, //멀티->싱글
new_name));
listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); // 반드시 설정해줘야 싱글초이스 됨
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// String mes="";
long num[] = listView.getCheckItemIds(); // 현재 체크된 id들의 배열 리턴
// 화면표시 - 여기서 얻어온 값들 처리하심
for(int i=0; i<num.length;i++)
{
mes = name[(int)num[i]]; //position:위치
mes +="\n";
}
Log.e(tag, mes); //로그 출력
Toast.makeText(address.this, mes, Toast.LENGTH_SHORT).show();
//전화번호 추출
StringBuffer sb = new StringBuffer();
for(int i=0; i<mes.length(); i++)
{
if(Character.isDigit(mes.charAt(i)))
{
sb.append(mes.charAt(i));
}
}
phoneText = sb.toString();
// Toast.makeText(address.this, "전화번호:"+sb, Toast.LENGTH_SHORT).show();
}
});
listView.setTextFilterEnabled(true); //주소록 검색
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
//입력되는 글자를 갖고 리스트뷰 항목을 필터링한다..
//입력되는 텍스트에 변화가 있을 때
listView.setFilterText(s.toString());
}
@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
//입력하기 전에
}
});
if(search==null)
{
Toast.makeText(getApplicationContext(), "비었다", Toast.LENGTH_SHORT).show();
}
//editText때문에 불필요하게 키패드가 올라오는 것을 방지
//editText를 누를 때만 팝업되도록한다.
search.setInputType(0);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
search.setInputType(1);
InputMethodManager mg = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
mg.showSoftInput(search, InputMethodManager.SHOW_IMPLICIT);
}
});
}