CustomAdapter Filter не работает, что делать? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть два списка ArrayList в программе, и я пытаюсь выполнить для них фильтрацию. Я использую CustomAdapter, который расширяет BaseAdpater, реализует Filterable. Я использовал несколько кодов для этого, но почему-то это не сработало. Коды следующие. Edittext используется для поиска / фильтрации. Есть ли проблема в методе publishResult? Или

public void search()
    {
        searchText = (EditText) findViewById(R.id.searchText);

        if (custNameList.size() != 0)
        {
            searchText.addTextChangedListener(new TextWatcher()
            {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                }

                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
                {
                   
                    mCustomAdapter.getFilter().filter(charSequence);
                }

                @Override
                public void afterTextChanged(Editable editable)
                {

                }
            });
        }
        else
        {
            Toast.makeText(this, "No Entry", Toast.LENGTH_SHORT).show();
        }
    }

    
    private class mCustomAdapter extends BaseAdapter implements Filterable
    {
        CustomFilter customFilter;
        ArrayList<String> filterList ;

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

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            convertView= layoutInflater.inflate(R.layout.item_subitem, null);

            TextView listCustID = convertView.findViewById(R.id.sampleCustId);
            TextView listCustName = convertView.findViewById(R.id.sampleCustName);

            listCustID.setText(custIdList.get(position));
            listCustName.setText(custNameList.get(position));

            return convertView;
        }

        @Override
        public Filter getFilter()
        {
            if(customFilter == null)
            {
                customFilter = new CustomFilter();
            }

            return customFilter;
        }

        class CustomFilter extends Filter
        {

            @Override
            protected FilterResults performFiltering(CharSequence constraint)
            {
                filterList = new ArrayList<String>();
                FilterResults filterResults = new FilterResults();
                if(constraint != null && constraint.length() > 0)
                {
                    constraint = constraint.toString().toUpperCase();
                    ArrayList<String> tempList = new ArrayList<String>();

                    for(int i=0 ; i<custIdList.size() ; i++)
                    {
                        if(custIdList.toString().contains(constraint) || custNameList.toString().toUpperCase().contains(constraint));
                        {
                            tempList.add(custIdList.get(i));
                        }
                    }
                    filterResults.count = tempList.size();
                    filterResults.values = tempList;
                }
                else
                {
                    filterResults.count = custIdList.size();
                    filterResults.values = custIdList;
                }
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults filterResults)
            {
                custIdList = (ArrayList<String>) filterResults.values;
                notifyDataSetChanged();

            }
        }
    }
...