AppCompatAutoCompleteTextView自动补全, 实时动态获取网络数据

1.初始化AppCompatAutoCompleteTextView

 autoComplete.setAdapter(autoCompleteAdapter);
//item点击监听
autoCompleteAdapter.setOnItemClickListener(new AutoCompleteAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(String aaa) {

                autoComplete.setText(aaa);
                autoComplete.setSelection(aaa.length());//光标移动到末尾
            }
        });
   //内容变化监听
autoComplete.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        if (触发条件) {
          网络获取搜索结果
        }

    }
});

2.自定义Adapter(需要继承BaseAdapter并实现Filterable(筛选类))

public class AutoCompleteAdapter extends BaseAdapter implements Filterable {


    private List<String> stringList;
    private Context context;

    private OnItemClickListener onItemClickListener;

    public AutoCompleteAdapter(Context context) {
        this.context = context;
    }
     //更新数据
    public void setStringList(List<String> stringList) {
        this.stringList = stringList;
        notifyDataSetChanged();
    }
    //设置item条目点击监听
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

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

    @Override
    public Object getItem(int position) {
        return stringList != null ? stringList.get(position) : null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.textView = convertView.findViewById(android.R.id.text1);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.textView.setText(stringList.get(position));
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null)
                    onItemClickListener.OnItemClick(stringList.get(position));
            }
        });

        return convertView;
    }

    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();
                ArrayList<String> newData = new ArrayList<>();
                if (stringList != null && stringList.size() != 0) {
                    newData.addAll(stringList);
                }
                results.values = newData;
                results.count = newData.size();
                return results;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                stringList = (ArrayList) results.values;
                notifyDataSetChanged();
            }
        };
        return filter;
    }

    class ViewHolder {
        private TextView textView;
    }

    public interface OnItemClickListener {
        void OnItemClick(String aaa);
    }


}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值