Предложение Android AutocompleteTextview отображается из 2 полей

У меня есть массив Json. Здесь уже установлен файл адаптера с этим текстовым представлением автозаполнения.

Из моего кода:

Я использовал класс-оболочку, такой как USER. В этом классе 3 поля есть (userid, username and designation).

здесь мне нужно написать какой-то текст, значит, нужно показать предложения из имени пользователя и обозначения. Если печатаемое слово совпадает с любым из этих двух полей, предложения должны отображаться.

Как я могу сделать с AutoCompleteTextView.

ArrayAdapter<User> userAdapter = new ArrayAdapter<>(getActivity(), R.layout
                                .spinner_item_text,
                                UserList);

Теперь предложения отображаются в массиве. Но мне нужно показать предложение как строку.

Для ЭГ:

UserList, имеющий такие значения, как

{
  "profile_view": [
    {
username :"test",designation:"SE"
    },
{
username :"test1",designation:"TE"
    }]}

теперь я набираю ключевое слово в поле, например «т», означает, что нужно дать предложения, например

 test
 test1
 TE

Как я могу сделать ? Пожалуйста, дайте мне какие-либо идеи для реализации этого?


person Krishna Veni    schedule 29.07.2016    source источник
comment
добавьте свои значения (test, test1 и т. д.) в Array. затем сделайте ArrayAdapter. после этого добавьте адаптер в AutoCompleteTextView.   -  person Sathish Kumar J    schedule 29.07.2016
comment
см. этот ответ   -  person pskink    schedule 29.07.2016


Ответы (2)


Напишите собственный адаптер и используйте пользовательскую фильтрацию в этом адаптере. В приведенном ниже коде SearchSuggestion — моя модель. Вы можете изменить модель и изменить условие поиска в методе performFiltering(). Надеюсь это поможет!

public class SearchSuggestionAdapter extends ArrayAdapter<SearchSuggestion> implements Filterable {

    private Context mContext;
    private List<SearchSuggestion> mSuggestionList;
    private List<SearchSuggestion> mFilteredSuggestionList;

    public SearchSuggestionAdapter(Context context, List<SearchSuggestion> suggestionList) {
        super(context, -1);
        mContext = context;
        mSuggestionList = suggestionList;
        mFilteredSuggestionList = mSuggestionList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.suggestion_item, null);
        viewHolder = new ViewHolder();
        viewHolder.mSuggestionTextView = (TextView) convertView.findViewById(R.id.suggestion_text);
        viewHolder.mSuggestionImage = (ImageView) convertView.findViewById(R.id.suggestion_image);
        convertView.setTag(viewHolder);
        } else {
        viewHolder = (ViewHolder) convertView.getTag();
        }
        SearchSuggestion searchSuggestion = mFilteredSuggestionList.get(position);
        viewHolder.mSuggestionTextView.setText(searchSuggestion.getName());
        viewHolder.mSuggestionImage.setImageResource(searchSuggestion.isTag() ? R.drawable.suggestion_tag_icon : R.drawable.suggestion_project_icon);
        return convertView;
    }

    public static class ViewHolder {
        private ImageView mSuggestionImage;
        private TextView mSuggestionTextView;
    }

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

    @Override
    public SearchSuggestion getItem(int position) {
        return mFilteredSuggestionList.get(position);
    }

    @Override
    public Filter getFilter() {
        return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint)     {
        final FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            constraint = constraint.toString().toLowerCase();
            List<SearchSuggestion> tempFilteredList = new ArrayList<>();
            for (SearchSuggestion suggestion : mSuggestionList) {
                String name = suggestion.getName();
                if (name != null && name.toLowerCase().contains(constraint)) {
                    tempFilteredList.add(suggestion);
                }
            }
            results.values = tempFilteredList;
            results.count = tempFilteredList.size();
        } else {
            results.values = mSuggestionList;
            results.count = mSuggestionList.size();
        }
        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        if (results.values != null) {
            mFilteredSuggestionList = (ArrayList<SearchSuggestion>) results.values;
            notifyDataSetChanged();
        }
    }
};
}
}
person Akshay Bhat 'AB'    schedule 29.07.2016

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

person Sahana Prabhakar    schedule 29.07.2016