android - AutoCompleteTextView 不显示文本

标签 android autocompletetextview

我有 AutoCompleteTextView,当我在下拉列表中选择一个项目时,值插入到表单中,但是当我关注另一个 View 时,例如 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>

我使用了自定义适配器:

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();
        }
    }
}

最佳答案

这似乎是我之前遇到的一个错误,基本上我解决了它在 AutoCompleteTextView 上设置两个额外的属性:

  • 自动完成 TextView 样式
  • 文字颜色

我知道这很乱,但请尝试一下,如果可行,请尝试找到适合您的布局的这些属性的组合。

关于android - AutoCompleteTextView 不显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295729/

相关文章:

java - 如何在不出现 DOMException 的情况下将节点复制到不同的文档?

android-fragments - 如何在 Android 的单个片段中使用多个 View 模型?

android 在自动完成 TextView 中获取电子邮件建议

android - onLongClick 时,AutoCompleteTextView 在剪切/复制/粘贴菜单上出现奇怪的裁剪问题

android - 将多个自定义元素设置为 MultiAutoCompleteTextView : Android

android - 使用TabLayout和ViewPager时,应用程序在选项卡2的后退按钮上崩溃

Android-Align 2 imageViews

android - 如何在没有市场非系统应用程序的情况下在 android 上自动安装 apk

android - 我正在尝试在 ANDROID 中开发 map (基本上是静态图像),我可以在其中显示不同的项目(在 map 本身中绘制)

android - AutoCompleteTextView 不适用于自定义 ArrayAdapter