마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰 검색기능, 검색 후 갱신.

0 추천

안녕하세요.

검색 버튼 없이, 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);
				}
			});
			
		  
	}

 

anci (19,950 포인트) 님이 2014년 4월 25일 질문

1개의 답변

0 추천
초보개발자ㅠ (33,870 포인트) 님이 2014년 4월 25일 답변
...