Thursday 30 March 2017

How to filter the data on list in Android.

Creating New Project.
Open android studio and create a new project.


File => New => New Project => Configure your new project => Select the form factor yours app will run on => Add an Activity to Mobile => Customize the Activity => Finish.

Create the Java file in project.
Open app => main => src = MainActivity.java


SearchView searchView=(SearchView)view.findViewById(R.id.searchView);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                (your adapter name).getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                (your adapter name) getFilter().filter(newText);
                return true;
            }
        });


//Click on listView
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CustomItem mReference = (CustomItem) parent.getAdapter().getItem(position);
                if (String.valueOf(mReference) == null) {
                    Toast.makeText(getActivity(), "NO REFERENCE", Toast.LENGTH_SHORT).show();
                } else {
                    Intent in = new Intent(getActivity(), DetailActivity.class);
                    in.putExtra("reference", mReference.getmReference());
                    startActivity(in);
                }
            }
        });



Create the Java file in project.

Open app => main => src = CustomAdapter .java


/**
 * Created by Saify on 3/21/2017.
 **/

public class CustomAdapter extends BaseAdapter implements Filterable {
    private static ArrayList<CustomItem> searchArrayList;

    private LayoutInflater mInflater;
    private ArrayList<CustomItem> orignalItems = new ArrayList<>();
    private ItemFilter mFilter = new ItemFilter();

    public CustomAdapter (Context context, ArrayList<CustomItem> results) {
        this.searchArrayList = results;
        this.orignalItems =results;
        mInflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return searchArrayList.size();
    }

    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.hotel_item, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.name);
           
           convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtName.setText(searchArrayList.get(position).getName());
        return convertView;
    }

    static class ViewHolder {
        TextView txtName;
      
    }

    /**
     * implement base BaseAdapter method here.....
     */

    @Override
    public Filter getFilter() {
        return mFilter;
    }

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

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

            FilterResults results = new FilterResults();

            final List<CustomItem> list = orignalItems;

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

            String filterableString ;

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

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

            return results;
        }

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

    }
}
 


No comments:

Post a Comment