2014-11-09 4 views
0

나는 json 배열을 가지고 있고 배열의 모든 항목을 목록 안에 넣습니다. 내가 필요한 것은이 목록을 검색하는 것입니다. 나는이 기능목록보기 배열 필터

// Locate the EditText in listview_main.xml 
    final EditText editsearch = (EditText) findViewById(R.id.editText1); 
    // Capture Text in EditText 
    editsearch.addTextChangedListener(new TextWatcher() { 

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

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, 
       int arg2, int arg3) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 

      String text = editsearch.getText().toString().toLowerCase(Locale.getDefault()); 
      adapter1.filter(text); 

     } 
    }); 

을 시도하지만 아무 것도 입력 할 때 목록 내가 그 문제를 해결할 수 방법

// Filter Class 
     public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     movieItems.clear(); 
     if (charText.length() == 0) { 
     movieItems.addAll(movieItems); 
     } 
     else 
     { 
     for (Movie wp : movieItems) 
     { 
      if (wp.getNAME().toLowerCase(Locale.getDefault()).contains(charText)) 
      { 
       movieItems.add(wp); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
    } 

다음과 같이 사용자 지정 목록 어댑터 안에 내 필터가

빈되었다?

답변

0

addAll 앞에 clear을 호출하면 빈 목록이 추가됩니다. 임시 "filteredList"를 만들고 "originalList"

// Filter Class 
    public void filter(String charText) { 
     charText = charText.toLowerCase(Locale.getDefault()); 
     List<Movie> filteredMovies = new ArrayList<Movie>(); 
     if (charText.length() == 0) { 
      filteredMovies.addAll(originalMovieList); 
     } 
     else 
     { 
      for (Movie wp : movieItems) 
       if (wp.getNAME().toLowerCase(Locale.getDefault()).contains(charText)) 
        filteredMovies.add(wp); 
     } 
     notifyDataSetChanged();  
    } 

사용자 정의 어댑터가 filteredList 번째 처리해야 기억에 대한 참조를 보유하지 원래

+0

감사합니다.하지만 필터링 된 목록을 처리하는 방법을 설명해 주시겠습니까? 내 모든 어댑터 코드를 에 다시 게시 해 주셔서 감사합니다. –

0

그것은 당신의 문제는 보지 않고 정확히 무슨 말을하기 어렵다 전체 어댑터 코드 그러나 사용자 정의 어댑터 내에 filter()이라는 메소드를 수동으로 구현하는 것처럼 보입니까? 사용자 지정 어댑터 (BaseAdapter까지 확장 됨)는 Filterable 인터페이스를 구현해야하며 필터링 된 검색을 수행하기 위해 액세스합니다.

자신의 솔루션을 굴리는 것이 어려울 수 있습니다. https://github.com/JaySoyer/Advanced-Adapters 레포를 확인해 보는 것이 좋습니다. 여기에는 자신의 필터링 로직을 쉽게 정의 할 수있는 많은 어댑터가 포함되어 있습니다. 특별히 JSONArrays과 함께 사용하는 것도 있습니다.

0

기본적으로 필터링 된 목록은 기본 필터링 된 목록과 다르며 필터링 된 모든 결과를 저장합니다.

검색 용어를 입력하면 필터링 된 목록에 모든 결과가 포함됩니다. 이 목록을 어댑터로 설정 한 다음 notifydatasetchanged()를 새 목록으로 호출하십시오.