0

customadapter 클래스에서 filterable을 구현했으며 listview를 통해 검색 할 수 있지만 내 검색 상자를 비울 때 내 목록에는 전체 검색 목록이 아닌 마지막 검색 앱이 표시됩니다.목록보기에서 검색 데이터를 가져 오는 데 문제가 있습니다.

mainactivity.java

public class MainActivity extends ListActivity { 
List<ApplicationInfo> appList; 
ListAdapter listAdapter; 
PackageManager packageManager; 
Process suProcess; 
DataOutputStream os; 
ApplicationInfo info; 
EditText search; 
ArrayList<ApplicationInfo> applist; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    packageManager = getPackageManager(); 
    new LoadApplication().execute(); 

    search = (EditText) findViewById(R.id.searchView); 
    search.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      listAdapter.getFilter().filter(s.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
} 
} 

내 필터 클래스를 추가했습니다.

private class ListFilter extends Filter { 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     FilterResults results = new FilterResults(); 
     if (constraint == null || constraint.length() == 0) { 
      results.values = applist; 
      results.count = applist.size(); 
     } else { 
      ArrayList<ApplicationInfo> info = new ArrayList<ApplicationInfo>(); 

      for (ApplicationInfo c : applist) { 
       if (c.loadLabel(packageManager).toString().toUpperCase().contains(constraint.toString().toUpperCase())) { 
        info.add(c); 
       } 
      } 
      results.values = info; 
      results.count = info.size(); 
     } 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     if (results.count == 0) { 
      notifyDataSetInvalidated(); 
     } else { 
      applist = (List<ApplicationInfo>) results.values; 
      notifyDataSetChanged(); 
     } 
    } 
} 

및 getFilter() 메소드를 대체합니다. 아래 링크

private class ItemFilter extends Filter { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 

      String filterString = constraint.toString().toLowerCase(); 

      FilterResults results = new FilterResults(); 

      final List<String> list = originalData; 

      int count = list.size(); 
      final ArrayList<String> nlist = new ArrayList<String>(count); 

      String filterableString ; 

      for (int i = 0; i < count; i++) { 
       filterableString = list.get(i); 
       if (filterableString.toLowerCase().contains(filterString)) { 
        nlist.add(filterableString); 
       } 
      } 

      results.values = nlist; 
      results.count = nlist.size(); 

      return results; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      filteredData = (ArrayList<String>) results.values; 
      notifyDataSetChanged(); 
     } 

    } 

추적하고 어댑터에 필터를 추가 : 추가를 들어

public Filter getFilter() { 

    if (filter == null) 
    { 
     filter=new ListFilter(); 
    } 
    return filter; 
} 
+0

... 제발 어떤 시작 코드를 보여 주시겠습니까 – Rahul

답변

1

당신이 코드를 다음과 같이 필터를 추가 할 필요가 검색

나는이 새로운 오전으로

Filtering ListView with custom (object) adapter

+0

나는이 방법에 대해 많이 들었습니다 ...하지만 그것을 구현하는 방법에 집착 ... 나를 초보자로 간주 Logged 그의 도움이 – Rahul

+0

위에 추가 된 링크를 따르십시오. –

+0

고마워요, 이제는 검색 할 수 있지만 내 검색 창을 비우면 전체 목록이 채워질 때까지 마지막 검색 결과가 표시됩니다. – Rahul