AutoCompleteTextView не отображает текст

У меня есть AutoCompleteTextView, когда я выбираю элемент в раскрывающемся списке, значение вставляется в форму, но когда я фокусируюсь на другом представлении, например edittext - мой текст устанавливается невидимым. Когда я снова возвращаю фокус в AutoCompleteTextView - мой текст снова становится видимым. В чем проблема ?

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:orientation="vertical"
        android:paddingRight="20dp"
        android:paddingLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/account_code"
            android:layout_marginTop="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:ems="20"
            android:inputType="number"
            android:hint="Account Code" />

        <AutoCompleteTextView
            android:id="@+id/search_book_data"
            android:completionThreshold="1"
            android:layout_marginTop="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:imeOptions="actionSearch"
            android:hint="Book data">
        </AutoCompleteTextView>

        </LinearLayout>
    </LinearLayout>
</ScrollView>

I used custom adapter:

private class BookSearchAdapter extends BaseAdapter implements Filterable {
    private LayoutInflater inflater;
    private List<Book> originBookData;
    private List<Book> fullBookData;
    private BookFilter filter;

    public BookSearchAdapter(Context context) {
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        filter = new BookFilter();
    }

    public void addAll(List<Book> bookData) {
        this.originBookData = bookData;
        fullBookData = bookData;
    }

    @Override
    public int getCount() {
        return originBookData == null ? 0 : originBookData.size();
    }

    @Override
    public Book getItem(int i) {
        return originBookData.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = inflater.inflate(R.layout.search_item, viewGroup, false);
        }
        Book book = getItem(i);
        TextView bookTitle = (TextView) view.findViewById(R.id.book_name);
        bookName.setText(book.getName());
        TextView bookPrice = (TextView) view.findViewById(R.id.book_price);
        bookprice.setText("" + book.getPrice());
        return view;
    }

    @Override
    public Filter getFilter() {
        return filter;
    }

    private class BookFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            FilterResults oReturn = new FilterResults();
            String keyCharacters = (String) charSequence;
            ArrayList<Book> results = new ArrayList<Book>();

            if (fullBookData == null) {
                fullBookData = new ArrayList<Book>(originBookData);
            }

            if (keyCharacters == null || keyCharacters.length() == 0) {
                List<Book> list = new ArrayList<Book>(fullBookData);
                oReturn.values = list;
                oReturn.count = list.size();
            } else {
                keyCharacters = keyCharacters.toLowerCase();
                if (books != null && books.size() > 0) {
                    for (Book book : originBookData) {
                        if (book.getName().toLowerCase().contains(keyCharacters)
                                || ("" + book.getPrice()).toLowerCase().contains(keyCharacters.)
                            results.add(book);
                    }
                }
                oReturn.values = results;
                oReturn.count = results.size();
            }
            return oReturn;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            originBookData = filterResults.values != null ? (ArrayList<Book>) filterResults.values : fullBookData;
            if (filterResults.count > 0)
                notifyDataSetChanged();
            else
                notifyDataSetInvalidated();
        }
    }
}

person user3134124    schedule 22.01.2014    source источник
comment
Попробуйте отрегулировать стиль / протестируйте это в нестилизованном действии. У меня были проблемы с автозаполнением текста в соответствии с правилами стиля, и мне интересно, соответствует ли текст цвету фона.   -  person sgarman    schedule 23.01.2014


Ответы (1)


Кажется, это ошибка, с которой я столкнулся некоторое время назад, в основном я решил ее, установив два дополнительных атрибута на AutoCompleteTextView:

  • autoCompleteTextViewStyle
  • цвет текста

Я знаю, что это беспорядок, но попробуйте, и если это сработает, попробуйте найти комбинацию тех атрибутов, которые подходят вашему макету.

person nKn    schedule 22.01.2014
comment
Если это помогло вам, примите ответ, чтобы другие пользователи также знали, что это решение работает. - person nKn; 23.01.2014