2013-05-11 5 views
0

listview에서 데이터를 가져 와서 데이터베이스에서 제공된 데이터를 표시했는데 이제 제공된 키워드 (대소 문자 무시)로 목록에서 특정 항목을 검색하고 싶습니다. 나는 그것을 시도했지만 예상 결과를 얻지 못했습니다. 내가 한 코드에 따르면, 오류를주지는 않지만 내 기대를 충족시키지 못합니다. 더 멀리 가도록 도와주세요.목록에 검색 기능 적용 android

ArrayList<String> bank=new ArrayList<String>(); 
EditText inputSearch; 
inputSearch.addTextChangedListener(new TextWatcher() { 

     private ArrayList<String> arrayList_sort = new ArrayList<String>(); 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      // When user changed the Text 
      int textlength=0; 
      textlength=inputSearch.getText().length(); 
      if(arrayList_sort!=null) 
       arrayList_sort.clear(); 
      for(int i=20;i<=bank.size();i++) 
      { 
       if(textlength<=bank.get(i).toString().length()) 
       { 
        //if(inputSearch.getText().toString().equalsIgnoreCase(String) bank.get(i).toString().subSequence(0, textlength))) 
        if (inputSearch 
          .getText() 
          .toString() 
          .equalsIgnoreCase(
            (String) bank.get(i).toString() 
              .subSequence(0, textlength))) 
        { 
         arrayList_sort.add(bank.get(i)); 
         Log.d("TAG", "log" + arrayList_sort.size()); 
        } 
       } 
      } 
     } 
     public void beforeTextChanged(CharSequence cs, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub       
     } 
    }); 
} 

나는 BaseAdapter을 사용했습니다. i = 0 인 경우 오류 "IndexOutOfBound"이 표시됩니다.

+0

** listList_sort **를 추가하지 않고 정리를위한 전체 코드를 표시 할 수 있습니까? – bakriOnFire

+0

우선, thw world에서'i == 0'을 어떻게 얻을 수 있습니까? for 루프는'i == 20'으로 시작하고 그 값은 nevr 감소합니다. 올바른 코드를 게시하십시오 – CRUSADER

+0

http://stackoverflow.com/questions/10816243/search-in-listview-with-edittext/15367403#15367403 – Raghunandan

답변

0

배열 목록을 지우지 마십시오. getText()를 수행하고 뷰를 검색하여 3000 개의 굴렁쇠를 뛰어 넘지 않고 데이터 구조를 검색하고 보존하십시오. 귀하의 코드는 더 빠르고 작을 것입니다.