Я добавил обновленный код.

я естьautocomplete text view в моем проекте Android, который работает нормально, но он работает, только если в него введено первое значение. Чтобы сделать его более настраиваемым, я добавил следующий класс

public class CustomArrayAdapterWIthFilter extends ArrayAdapter<String> implements Filterable {
List<String> items = null;
List<String> originalItems = null;
private MyFilters myFilters = null;
Context mContext;

public CustomArrayAdapterWIthFilter(@NonNull Context context, @LayoutRes int resource, @NonNull List<String> objects) {
    super(context, resource, objects);
    this.items = new ArrayList<>();
    items.addAll(objects);
    this.originalItems = new ArrayList<>();
    this.originalItems.addAll(objects);
    mContext = context;
}

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

@Nullable
@Override
public String getItem(int position) {
    return items.get(position);
}

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

@Override
public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
}

@NonNull
@Override
public Filter getFilter() {
    if (myFilters == null) {
        myFilters = new MyFilters();
    }
    return myFilters;
}

class MyFilters extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults result = new FilterResults();

        if (constraint != null && constraint.toString().length() > 0) {
            ArrayList<String> filteredItems = new ArrayList<String>();

            for (int i = 0, l = originalItems.size(); i < l; i++) {
                String item = originalItems.get(i);
                if (item.toString().toLowerCase().contains(constraint))
                    filteredItems.add(item);
            }
            result.count = filteredItems.size();
            result.values = filteredItems;
        } else {
            synchronized (this) {
                result.values = originalItems;
                result.count = originalItems.size();
            }
        }
        return result;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        items = (ArrayList<String>) results.values;
        notifyDataSetChanged();
        clear();
        for (int i = 0, l = items.size(); i < l; i++)
            add(items.get(i));
        notifyDataSetInvalidated();
    }
}

public void addItems(List<String> items) {
    this.items = items;
    notifyDataSetChanged();
}

В моем фрагменте я сделал следующее

CustomArrayAdapterWIthFilter meterSrNumAdapter;
 if (meterSrNumAdapter.getCount() == 0) {
            meterSrArrayList = new MeterManager(getActivity()).getRefNoByStatus(Constants.SR_NO_UN_USED);
            meterSrArrayList.add(installationDetails.getMsn());
            meterSrNumAdapter.addItems(meterSrArrayList);
        }
 if (meterSrNumAdapter.getCount() == 0) {
            meterSrArrayList = new MeterManager(getActivity()).getRefNoByStatus(Constants.SR_NO_UN_USED);
            meterSrNumAdapter.addItems(meterSrArrayList);
        }

meterSrArrayList = new ArrayList<String>();
    meterSrNumAdapter = new CustomArrayAdapterWIthFilter(getActivity(), R.layout.custom_spinner_layout, meterSrArrayList);
    smartMsnSpinner.setAdapter(meterSrNumAdapter);
    smartMsnSpinner.setSingleLine(true);
    smartMsnSpinner.setThreshold(1);

    smartMsnSpinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
           selectedMeterNo = adapterView.getItemAtPosition(i).toString();
            Log.d("testtt", adapterView.getItemAtPosition(i).toString());
        }


    });

В приведенном выше кодеsmartMsnSpinner мой автозаполнение просмотра текста

Когда я запускаю свое приложение, автозаполнение не работает. Я пробовал некоторые другие адаптеры, которые размещены через Интернет. Но результат все тот же. Я пытаюсь использовать этот пользовательский адаптер, потому что в моем другом приложении он работает идеально, и в этом коде я делаю то же самое.

Обновление 1

После предложения я изменил код пользовательского адаптера, учитывая, что другая часть кода такая же, как добавленная выше.

List<String> suggestionItems = null;

//In constructor
this.items = new ArrayList<>(objects);

this.originalItems = new ArrayList<>(objects);

mContext = context;

class MyFilters extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {

        if(constraint !=null)
        {
            suggestionItems.clear();

            for(int i=0, i1 = originalItems.size(); i <i1; i++)
            {
                String item = originalItems.get(i);
                if(item.toString().toLowerCase().contains(constraint))
                    suggestionItems.add(item);
            }
            FilterResults filterResults = new FilterResults();
            filterResults.values = suggestionItems;
            filterResults.count = suggestionItems.size();
            return filterResults;
        }
        else
        {
            return new FilterResults();
        }

    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
         if(results !=null && results.count > 0)
         {
             items.clear();
             items = (ArrayList<String>)results.values;
             notifyDataSetChanged();
         }
         else
         {
             items.addAll(originalItems);
         }
    }
}

Любая помощь будет высоко ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос