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;
}
... 제발 어떤 시작 코드를 보여 주시겠습니까 – Rahul