Android自动填充文字视图不显示建议

时间:2017-01-18 05:08:07

标签: android

我的代码出了什么问题?我在自动填充文本视图中获取整个列表作为建议。

public class ContactAdapter extends ArrayAdapter<String> {

List<ContactList> contactLists;
List<ContactList> suggestions;
LayoutInflater inflater;

public ContactAdapter(Activity context, int id, ArrayList list) {

    super(context, id,list);
    this.contactLists = list;
    suggestions = new ArrayList<>();
    inflater = (LayoutInflater.from(context));
}
private View getCustomView(final int position, View view, ViewGroup viewGroup){

    view = inflater.inflate(R.layout.custom_contact_layout, null);
    TextView name = (TextView)view.findViewById(R.id.textView);
    TextView email = (TextView)view.findViewById(R.id.textView2);

    name.setText(contactLists.get(position).getName());
    email.setText(contactLists.get(position).getEmail());

    return  view;
}

@Override
public View getView(int position , View view , ViewGroup parent)
{
    return getCustomView(position,view,parent);
}

@Override
public Filter getFilter() {

    Filter nameFilter = new Filter() {

        @Override
        public CharSequence convertResultToString(Object result) {

            return ((ContactList) result).getName();
        }


        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults filterResults = new FilterResults();

            if (constraint != null) {

                suggestions.clear();

                for (int contactName = 0; contactName < contactLists.size(); contactName++) {

                    if (contactLists.get(contactName).getName().toLowerCase().startsWith(constraint.toString().toLowerCase())) {

                        suggestions.add(contactLists.get(contactName));
                        Log.d(">add>", contactLists.get(contactName).getName() + "");
                    }
                }

                filterResults.values = suggestions;
                filterResults.count = suggestions.size();

            }
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {

            if (results.count > 0) {

                suggestions.clear();
                suggestions = (List<ContactList>) results.values;

                notifyDataSetChanged();

            } else
                notifyDataSetInvalidated();
        }
    };

    return nameFilter;
}

}

告诉我如何才能将过滤后的结果作为建议。在执行过滤方法时,只会添加过滤后的结果。为什么它没有反映在publishResults方法中?

1 个答案:

答案 0 :(得分:0)

将您的代码更改为:

Log.d(">>","called");
    if(results.count >0){
        suggestions.clear();
        suggestions = (List<ContactList>) results.values;
        notifyDataSetChanged();
    }
    else
        notifyDataSetInvalidated(); 
}