Первый символ не фильтруется - PullRequest
0 голосов
/ 03 апреля 2020

search word = "example"

Я не могу заставить это работать. Если я ищу «xample», тогда фильтр работает нормально (я получаю «пример» обратно), но когда я ищу «пример», я получаю пустой результат вместо отфильтрованного результата.

Кажется, первый символ не распознается. Я перепробовал все.

Приведенный ниже код является примером реализации.

Фрагмент. java

SearchText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                              int arg3) {

    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1,
                                  int arg2, int arg3) {
        adapter.getFilter().filter(arg0.toString().toLowerCase());
    }

    @Override
    public void afterTextChanged(final Editable arg0) {

    }

});

Адаптер. java

public class Adapter extends BaseAdapter {
    Context context;

    private ArrayList<DataModel> arraylist;
    private ArrayList<DataModel> arraylistFiltered;

    //constructor initializing the values
    public Adapter(Context context, ArrayList<DataModel> arraylist) {
        this.context = context;
        this.arraylist = arraylist;
        this.arraylistFiltered = arraylist;
    }


    public int getViewTypeCount() {
        return 1;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

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

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

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

    //this will return the ListView Item as a View
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {
            holder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.listitemcreator, null, true);

            holder.VarietyImage = (ImageView) convertView.findViewById(R.id.VarietyImage);
            holder.VarietyName = (TextView) convertView.findViewById(R.id.VarietyName);
            holder.VarietyMemoText = (TextView) convertView.findViewById(R.id.VarietyMemoText);

            convertView.setTag(holder);
        } else {
            // the getTag returns the viewHolder object set as a tag to the view
            holder = (ViewHolder) convertView.getTag();
        }

        if (arraylistFiltered.get(position).getImages().equals("null")) {
            Picasso.get().load(R.mipmap.iconapp).into(holder.VarietyImage);
        } else {
            Picasso.get().load("" + arraylistFiltered.get(position).getImages()).into(holder.VarietyImage);
        }

        //holder.VarietyImage.setImageBitmap(arraylist.get(position).getImages());

        holder.VarietyName.setText(arraylistFiltered.get(position).getName());
        holder.VarietyMemoText.setText(arraylistFiltered.get(position).getMemoText());

        return convertView;
    }

    private class ViewHolder {

        protected TextView VarietyName, VarietyMemoText;
        protected ImageView VarietyImage;
    }


    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults filterResults = new FilterResults();
                if (constraint == null || constraint.length() == 0) {
                    filterResults.count = arraylist.size();
                    filterResults.values = arraylist;

                } else {
                    ArrayList<DataModel> resultsModel = new ArrayList<>();
                    String searchStr = constraint.toString().toLowerCase().trim();

                    for (DataModel itemsModel : arraylist) {
                        if (itemsModel.getName().contains(searchStr)) {
                            resultsModel.add(itemsModel);
                            Log.e("Search -> ", "performFiltering: " + searchStr);
                        }
                        filterResults.count = resultsModel.size();
                        filterResults.values = resultsModel;
                    }
                }

                return filterResults;
            }

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

                arraylistFiltered = (ArrayList<DataModel>) results.values;
                notifyDataSetChanged();

            }
        };
        return filter;
    }
}

DataModel. java

public class DataModel {

    private String ID, Images, Name, MemoText;


    // Setting Images and getting Images
    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }


    // Setting Images and getting Images
    public String getImages() {
        return Images;
    }

    public void setImages(String Images) {
        this.Images = Images;
    }


    // Setting Name and getting Name
    public String getName() {
        return Name;
    }

    public void setName(String Name) {
        this.Name = Name;
    }


    // Setting MemoText and getting MemoText
    public String getMemoText() {
        return MemoText;
    }

    public void setMemoText(String MemoText) {
        this.MemoText = MemoText;
    }
}

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...