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.

1

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

2 Comments

where i can put the method ??
sorry i really not understand your code. i put the your method in my activity. and i need create method sort in my array adapter.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.