Android-实现搜索框下方动态刷新显示关联的搜索数据(以百度地图搜索为例)

要实现搜索框的动态刷新,我们需要注意两个要点,一个是数据源,即能够每次在输入搜索数据以后都能够得到一个与输入的数据相关的数据源,用来显示在RecylerView当中,另一个是RecylerView的适配器是以内部类的方式写在主活动当中,方便刷新。

1.准备数据源

此处是以百度地图为例,在输入框每次的状态改变后,都会调用一次百度地图SDK的SuggestionSearch事件监听,从而获得关键数据源。
关键代码1:用于返回事件监听的数据

        OnGetSuggestionResultListener listener = new OnGetSuggestionResultListener() {
   
            @Override
            public void onGetSuggestionResult(SuggestionResult suggestionResult) {
   
                //处理sug检索结果
                if(suggestionResult == null || suggestionResult.getAllSuggestions() == null){
   
                    System.out.println("未找到");
                }else{
   
                    suggest = suggestionResult.getAllSuggestions();
                    for (SuggestionResult.SuggestionInfo suggestionInfo:suggest){
   
                        System.out.println("所查找地址:"+suggestionInfo.getAddress()+"长度:"+suggestionInfo.getAddress().length());
                    }

                    searchAdapter.reFresh(suggest);
                }
            }
        };
        mSuggestionSearch.setOnGetSuggestionResultListener(listener);

关键代码2:监听输入框的状态,从而请求新的数据

    //查找逻辑实现
    private void search() {
   
        TextWatcher watcher = new TextWatcher() {
   

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
   
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
   
                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {
   
                // TODO Auto-generated method stub
                if (editText.getEditableText().length() >= 1){
   
                    btnClear.setVisibility(View.VISIBLE);
                } else{
   
                    btnClear.setVisibility(View.GONE);
                }
                mSuggestionSearch.requestSuggestion(new SuggestionSearchOption()
                        .city("长沙")//此处应该是根据需求传入城市地址,为求方便选择了长沙
                        .keyword(""+editText.getText().toString()));
            }
        };
        editText.addTextChangedListener(watcher);
    }

2.准备适配器并调用适配器的notifyDataSetChanged()方法刷新数据

关键代码:

    public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.MyViewHolder> {
   
        List<SuggestionResult.SuggestionInfo> suggest = new ArrayList<>();
        TargetAddress targetAddress = null;
        SearchAdapter(List<SuggestionResult.SuggestionInfo> suggest){
   
            this.suggest = suggest;
        }
        @NonNull
        //绑定当前视图布局
        @Override
        public SearchAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
   
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_list_item, parent, false);
            final SearchAdapter.MyViewHolder vh = new SearchAdapter.MyViewHolder(view);
            vh.textView.setOnClickListener(new View.OnClickListener() {
   
                @Override
                public void onClick(View v) {
   
                    int position = vh.getAdapterPosition();
                  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值