Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 将AutoCompleteTextView过滤器从“startsWith”更改为“Contains”?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想更改AutoCompleteTextView中的认过滤.认筛选查找以给定标记开始的所有字符串.我的项目要求过滤应该找到包含给定标记的所有字符串.

可能吗?

解决方法

我找到了一个解决方案,感谢Google和搜索两天.正如@ torque203建议的那样,我已经实现了自己的自定义适配器.首先在适配器中为自定义Item定义一个新的 XML文件

autocomplete_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://@R_616_10906@mas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:id="@+id/lbl_name" />
</RelativeLayout>

为您的名称创建新类:

名称

public class Names {
    public String name;
}

NamesAdapter

public class NamesAdapter extends ArrayAdapter<Names> {

    Context context;
    int resource,textViewresourcEID;
    List<Names> items,tempItems,suggestions;

    public NamesAdapter(Context context,int resource,int textViewresourcEID,List<Names> items) {
        super(context,resource,textViewresourcEID,items);
        this.context = context;
        this.resource = resource;
        this.textViewresourcEID = textViewresourcEID;
        this.items = items;
        tempItems = new ArrayList<Names>(items); // this makes the difference.
        suggestions = new ArrayList<Names>();
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        View view = convertView;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemservice(Context.LAYOUT_INFLATER_serviCE);
            view = inflater.inflate(R.layout.autocomplete_item,parent,falsE);
        }
        Names names = items.get(position);
        if (names != null) {
            TextView lblName = (TextView) view.findViewById(R.id.lbl_Name);
            if (lblName != null)
                lblName.setText(names.Name);
        }
        return view;
    }

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

    /**
     * Custom Filter implementation for custom suggestions we provide.
     */
    Filter nameFilter = new Filter() {
        @Override
        public CharSequence convertResultToString(Object resultvalue) {
            String str = ((Names) resultvalue).name;
            return str;
        }

        @Override
        protected FilterResults performFiltering(CharSequence consTraint) {
            if (consTraint != null) {
                suggestions.clear();
                for (Names names : tempItems) {
                    if (names.name.toLowerCase().contains(consTraint.toString().toLowerCase())) {
                        suggestions.add(names);
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
                return filterResults;
            } else {
                return new FilterResults();
            }
        }

        @Override
        protected void publishResults(CharSequence consTraint,FilterResults results) {
            List<Names> filterList = (ArrayList<Names>) results.values;
            if (results != null && results.count > 0) {
                clear();
                for (Names names : filterList) {
                    add(names);
                    notifyDataSetChanged();
                }
            }
        }
    };
}

SearchActivity(或您的主要活动)

....
   List<Names> namesList =  //your names list;
   NamesAdapter namesAdapter = new NamesAdapter(
                    SearchActivity.this,R.layout.activity_search,R.id.lbl_name,namesList
            );
            //set adapter into liststudent
            autoCompleteTextView.setAdapter(namesAdapter);
            autoCompleteTextView.showDropDown();
...

大佬总结

以上是大佬教程为你收集整理的android – 将AutoCompleteTextView过滤器从“startsWith”更改为“Contains”?全部内容,希望文章能够帮你解决android – 将AutoCompleteTextView过滤器从“startsWith”更改为“Contains”?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。