Android: Custom AutoCompleteTextView показывает последний элемент после того, как он был выбран - PullRequest
1 голос
/ 12 октября 2011

Я реализовал настраиваемое автоматическое заполнение текстового представления, чтобы пользователи могли выбирать теги; когда элемент выбран, он правильно вызывает слушателя, чтобы установить выделенный текст в представлении и цвет, который соответствует ему. Проблема, с которой я сталкиваюсь, заключается в том, что выбранный элемент мгновенно возвращается обратно в качестве одного из вариантов выбора; Я хочу, чтобы элемент ушел (и, возможно, мог бы сделать это, отслеживая нажатый элемент, но есть ли более чистый способ сделать это или что-то, чего мне не хватает?

Фильтр:

    protected class TagFilter extends Filter{
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();
        if(resultTags == null){
            resultTags = new LinkedList<Tag>();
        }
        else {
            resultTags.clear();
        }
        if (constraint != null) {
            String tagString = constraint.toString();
            for (Tag tag : globalTags) {
                if (tag.getText().startsWith(tagString)) {
                    resultTags.add(tag);
                }

            }
            if(resultTags.size() > 1) Collections.sort(resultTags);
        }
        synchronized (this) {
            results.values = resultTags;
            results.count = resultTags.size();
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        tagAdapter.clear();
        if (results.count > 0) {
            for(Tag tagResult : (List<Tag>)results.values){
                tagAdapter.add(tagResult);
            }
            tagAdapter.notifyDataSetChanged();
        }
        else {
            tagAdapter.notifyDataSetInvalidated();
        }
    }
}

Код адаптера бирки:

    protected class TagAdapter extends ArrayAdapter<Tag> implements Filterable {
    @Override
    public Filter getFilter() {
        if(tf == null){
            tf = new TagFilter();
        }
        return tf;
    }
    public TagAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView text = new TextView(CreateActivity.this);
        text.setPadding(20, 20, 20, 20);
        text.setTextSize(20);
        text.setBackgroundColor(Color.BLACK);
        text.setTextColor(Color.WHITE);

        //TODO holder here
        Tag tag = getItem(position);
        text.setText("     " + tag.getText(), TextView.BufferType.SPANNABLE);
        ((Spannable)text.getText()).setSpan(
                new BackgroundColorSpan(tag.getColor()), 
                0, 
                4, 
                0);
        return text;
    }       
}

Слушатель AutoCompleteTextView:

    tagText.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Tag selectedTag = resultTags.get((int) arg3);

            selectedColor = selectedTag.getColor();
            tagText.setText(selectedTag.getText());
            tagText.dismissDropDown();
        }


    });

У кого-нибудь есть идея?

...