How to implement getFilter on a BaseAdapter?

android, baseadapter, filter, listview

Solution

in your adapter put this class to use it in getfilter method

//this is a simple class that filtering the ArrayList of strings used in adapter

public class filter_here extends Filter{

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            // TODO Auto-generated method stub

            FilterResults Result = new FilterResults();
            // if constraint is empty return the original names
            if(constraint.length() == 0 ){
                Result.values = Original_Names;
                Result.count = Original_Names.size();
                return Result;
            }

            ArrayList<String> Filtered_Names = new ArrayList<String>();
            String filterString = constraint.toString().toLowerCase();
            String filterableString;

            for(int i = 0; i<Original_Names.size(); i++){
                filterableString = Original_Names.get(i);
                if(filterableString.toLowerCase().contains(filterString)){
                    Filtered_Names.add(filterableString);
                }
            }
            Result.values = Filtered_Names;
            Result.count = Filtered_Names.size();

            return Result;
        }

        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {
            // TODO Auto-generated method stub
            Names = (ArrayList<String>) results.values;
            notifyDataSetChanged();
        }

    }

return instance from it in getfilter

@Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
        return filter;
    }

full example

Problem

I am trying to implement a getFilter() on a base adapter to filter out search results on a List. Is there any example of how to implement a getFilter()? MainActivity.java ``` final AppInfoAdapter adapter = new AppInfoAdapter(this, Utilities.getSystemFilteredApplication(this), getPackageManager()); public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.getFilter().filter(s); //Filter from my adapter adapter.notifyDataSetChanged(); //Update my view } ``` AppInfoAdapter.java ``` package com.example.permission; import java.util.List; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; import android.widget.TextView; public class AppInfoAdapter extends BaseAdapter implements Filterable{ private Context mContext; private List mListAppInfo; PackageManager mPackManager; public AppInfoAdapter(Context c, List list, PackageManager pm) { mContext = c; mListAppInfo = list; mPackManager = pm; } public int getCount() { return mListAppInfo.size(); } public Object getItem(int position) { return mListAppInfo.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { // get the selected entry ApplicationInfo entry = (ApplicationInfo) mListAppInfo.get(position); // reference to convertView View v = convertView; // inflate new layout if null if(v == null) { LayoutInflater inflater = LayoutInflater.from(mContext); v = inflater.inflate(R.layout.layout_appinfo, null); } // load controls from layout resources ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon); TextView tvAppName = (TextView)v.findViewById(R.id.tvName); TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack); // set data to display ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager)); tvAppName.setText(entry.loadLabel(mPackManager)); tvPkgName.setText(entry.packageName); // return view return v; } public Filter getFilter() { // TODO Auto-generated method stub return null; } } ``` EDIT: Edited the code and added full AppInfoAdapter.java

Original source

Related problems