Java 在listview中获取搜索数据的问题

Java 在listview中获取搜索数据的问题,java,android,listview,android-package-managers,android-search,Java,Android,Listview,Android Package Managers,Android Search,我已经在customadapter类中实现了filterable,我可以通过listview进行搜索,但是当我清空搜索框时,我的列表仍然显示最后一个搜索应用程序,而不是整个应用程序列表 mainactivity.java public class MainActivity extends ListActivity { List<ApplicationInfo> appList; ListAdapter listAdapter; PackageManager packageMa

我已经在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 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();
        }

    }
私有类ItemFilter扩展了筛选器{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
String filterString=constraint.toString().toLowerCase();
FilterResults results=新的FilterResults();
最终列表=原始数据;
int count=list.size();
最终ArrayList NLList=新ArrayList(计数);
串滤器串;
for(int i=0;i
按照以下链接并在适配器中添加过滤器:


因为我是新的……你能给我看一些启动代码吗?我已经听说过这个方法很多…但是在如何实现它上……把我看作是新手,在这个和帮助后面的链接上面加上了。谢谢,现在我可以搜索了,但是当我清空我的搜索框时,我没有得到完整的列表,它仍然显示最后的搜索结果。
 public Filter getFilter() {

    if (filter == null)
    {
        filter=new ListFilter();
    }
    return filter;
}
 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();
        }

    }