【问题标题】:Android filtered Listview with all Items loaded initiallyAndroid过滤了Listview,最初加载了所有项目
【发布时间】:2016-02-03 16:47:46
【问题描述】:

我正在显示过滤后的列表视图,如下所示。

public class SimpleArrayAdapter extends BaseAdapter implements Filterable {


        private Context context;
        private ServicesFilter filter;
        public SimpleArrayAdapter(Context _context, ArrayList<Services> values) {
            context = _context;
        }

        @Override
        public Filter getFilter() {
            if (filter == null){
                filter  = new ServicesFilter();
            }
            return filter;
        }


        @Override
        public int getCount() {
            return filteredServices.size();
        }

        @Override
        public Object getItem(int position) {
            return filteredServices.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.job_review_cell, null);
            }

            TextView txt_Desc = (TextView) convertView.findViewById(R.id.txt_Content);
            Services cat = (Services)getItem(position);
            txt_Desc.setText(cat.getCategoryName());
            return convertView;
        }

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

                FilterResults result = new FilterResults();

                if(constraint != null && constraint.toString().length() > 0)
                {
                    String searchTerm = constraint.toString().toLowerCase();
                    ArrayList<Services> filteredItems = new ArrayList<>();

                    for(int i=0;i<services.size();i++)
                    {
                        Services cat = services.get(i);
                        String catName = cat.getCategoryName().toLowerCase();
                        if(catName.contains(searchTerm))
                        {
                            filteredItems.add(cat);
                        }
                    }
                    result.count = filteredItems.size();
                    result.values = filteredItems;
                }
                else
                {
                    synchronized (this)
                    {
                        result.values = services;
                        result.count = services.size();
                    }
                }

                return result;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                filteredServices = (ArrayList<Services>)results.values;
                //Hide or show the results list view
               if(filteredServices.size() == services.size())
                    listContainer.setVisibility(View.GONE);
                else if(filteredServices.size() > 0)
                   listContainer.setVisibility(View.VISIBLE);
                notifyDataSetChanged();
            }
        }
    }

这工作正常。但现在我希望列表视图最初加载项目并从中过滤。

这里是 TextWatcher

private TextWatcher textWatcher = 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) {
            searchAdapter.getFilter().filter(s.toString());
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    };

怎么做?

【问题讨论】:

    标签: android listview android-filter


    【解决方案1】:

    您必须在工具中使用 SearchView。

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>
    

    和,

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.dashboard, menu);
    
         MenuItem searchItem = menu.findItem(R.id.action_search);
    
        SearchManager searchManager = (SearchManager)MainActivity.this.getSystemService(Context.SEARCH_SERVICE);
    
        SearchView searchView = null;
        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        return super.onCreateOptionsMenu(menu);
    }
    

    详情请看这里https://stackoverflow.com/a/27482902/1084174

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多