0

I am a begginer in Android.I tried to make a custom listview filtering and it worked somehow. i have array adapter in my class. i use the method when text filter changed. i running my application and there's no error. but the result doesn't same with the keyword.

my code in onCreateView if the text keyword changed

    inputSearch=(EditText) rootView.findViewById(R.id.inputSearch);   
    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
                 // adapter = new ListFPPAdapter();                                                         
                  //listProyekfpp.setAdapter(adapter);
                FPPFragment.this.adapter.getFilter().filter(cs);    

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }
    });

and this is my method array adapter

class ListFPPAdapter extends ArrayAdapter<ClsProyek> {

    ArrayList<ClsProyek> listOrginalProyek = null;

    ArrayList<ClsProyek> FilterListProyek = null;
    Filter filter;

    ListFPPAdapter() {
        super(getActivity(), R.layout.list_proyek_item, Proyek);

        this.listOrginalProyek = new ArrayList<ClsProyek>(Proyek);
        this.FilterListProyek = new ArrayList<ClsProyek>(Proyek);
    }

    @Override
    public View getView(int pos, View row, ViewGroup viewGroup) {
        ListProyekItemHolder holder = null;

        if(row == null) {
            LayoutInflater inflater = getActivity().getLayoutInflater();
            row = inflater.inflate(R.layout.list_proyek_item, viewGroup, false);
            holder = new ListProyekItemHolder(row);

            row.setBackgroundColor(android.R.drawable.list_selector_background);
            row.setTag(holder);
        } else {
            holder = (ListProyekItemHolder)row.getTag();
        }

        holder.populateFrom(Proyek.get(pos));        
        return row;
    }

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

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

    @Override
    public ClsProyek getItem(int position) {
        return FilterListProyek.get(position);
    }

    private class ResultFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();

            String filterText = constraint.toString().toLowerCase();
            if (filterText == null || filterText.length() == 0) {
                synchronized (this) {
                   results.values = listOrginalProyek;
                   results.count = listOrginalProyek.size();
                }
            } else {
                ArrayList<ClsProyek> filterList = new ArrayList<ClsProyek>();
                ArrayList<ClsProyek> originalList = new ArrayList<ClsProyek>();
                synchronized (this) {
                    originalList.addAll(listOrginalProyek);
                }
                for (int i = 0, l = originalList.size(); i < l; i++) {
                    ClsProyek m = originalList.get(i);
                    final String Param=m.getNamaClient().toLowerCase();
                    if (Param.contains(filterText)) {
                        filterList.add(m);
                    }
                }
                results.values = filterList;
                results.count = filterList.size();

            }

            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            FilterListProyek = (ArrayList<ClsProyek>) results.values;
            if(results.count > 0)
            {
                notifyDataSetChanged();
            }else{
                notifyDataSetInvalidated();
            }
        }
    }
}

Help Me Please.

Pandiyan Muthu
  • 1,040
  • 4
  • 21
  • 39
  • 1
    please check my ans here http://stackoverflow.com/questions/23422072/searchview-in-listview-having-a-custom-adapter/23422665#23422665 – Haresh Chhelana May 13 '14 at 10:12

1 Answers1

0

Use the sort method available in your adapter to get it done.

adapter.sort(new Comparator<String>() {
    @Override
    public int compare(String lhs, String rhs) {
        return lhs.compareTo(rhs);   //Your sorting algorithm
    }
});

For more refer this SO quesiton : Sort listview with array adapter

Community
  • 1
  • 1
vjdhama
  • 4,878
  • 5
  • 33
  • 47