码迷,mamicode.com
首页 > 其他好文 > 详细

AutoCompleteTextView搭配PoiSearch的使用

时间:2018-07-22 17:06:21      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:col   else   项目   ble   ddr   search   java   str   ada   

项目需要 需要用到AutoCompleteTextView控件,在输入之后能在下方产生一个推荐结果的列表,就类似于金山词霸一类软件.输入一两个字符就能出来一系列类似的的单词,

这里做的例子是输入城市名和具体的地点名,然后得到推荐的结果,在下面显示出来,选择其中一个然后再地图上进行标记

效果图:

技术分享图片

首先是AutoCompleteTextView部分

<AutoCompleteTextView
                android:id="@+id/search_content"
                android:layout_width="300dp"
                android:layout_height="wrap_content"
                android:completionThreshold="1"
                android:maxLines="1" />
android:completionThreshold="1"是设置当它输入一个字符的时候就有提示出来
之后,就是对其中的文本进行监听和对推荐列表中的Item进行监听
searchByInput = (AutoCompleteTextView) findViewById(R.id.search_content);
//设置文本监听
searchByInput.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) {
                //改变中
                addSearch();
            }

            @Override
            public void afterTextChanged(Editable s) {
                //改变后
                addSearch();
            }
        });
//设置选择Item监听
searchByInput.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               try{
                   //记录位置
                   myAddress = searchResult.get(position);
                   Toast.makeText(Welcome.this,"position = "+ myAddress,Toast.LENGTH_SHORT).show();
               }catch (NullPointerException e){
                   Toast.makeText(Welcome.this,"请输入内容",Toast.LENGTH_SHORT).show();
               }
            }
        });

然后就是利用输入得到的文本就行POI检索了

POI即Point of interest,例如餐厅酒吧这些,都可以算是POI,百度地图提供专门的POI,给开发人员用,在上面的代码中的addResearch中就是进行POI的检索

public void addSearch(){
        //根据城市名和key搜索
        poiCitySearchOption = new PoiCitySearchOption();
        poiCitySearchOption.city(myCity).keyword(searchByInput.getText().toString()).pageNum(0).pageCapacity(10);
        poiSearch.searchInCity(poiCitySearchOption);
    }

之后对poiSearch监听,得到搜索的结果

poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
            @Override
            public void onGetPoiResult(PoiResult poiResult) {
                 searchResult = new ArrayList<>();
                if(poiResult.error == SearchResult.ERRORNO.NO_ERROR){
                    if(searchResult.size()!=0){
                        //如果不是空  就先清除之前的查询结果
                        searchResult.clear();
                        for (int i = 0; i < poiResult.getAllPoi().size();i++){
                            //添加进入列表
                            searchResult.add(poiResult.getAllPoi().get(i).name+","+poiResult.getAllPoi().get(i).area);
                        }
                        //适配器的初始化和设置适配器
                        ArrayAdapter<String> resultAdapter = new ArrayAdapter<>(getApplicationContext(),R.layout.search_content,searchResult);
                        searchByInput.setAdapter(resultAdapter);
                    }else {
                        for (int i = 0; i < poiResult.getAllPoi().size();i++){
                            searchResult.add(poiResult.getAllPoi().get(i).name+","+poiResult.getAllPoi().get(i).address);
                        }
                        ArrayAdapter<String> resultAdapter = new ArrayAdapter<>(getApplicationContext(),R.layout.search_content,searchResult);
                        searchByInput.setAdapter(resultAdapter);
                    }
                }
            }

这里要说的是,AutoCompleteTextView需要自己弄一个适配器,适配器需要单独一个布局文件,下面是我的适配器的布局文件

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/every_result"
    android:layout_width="match_parent"
    android:layout_height="40dp" />

选择相应的Item后,再进行一个地图解码的过程,由名称的到地点的经纬度,然后创建一个Marker添加到地图上

所以要先对Item监听,即对推荐的结果的列表进行监听

searchByInput.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               try{
                   //记录位置
                   myAddress = searchResult.get(position);
                   Toast.makeText(Welcome.this,"position = "+ myAddress,Toast.LENGTH_SHORT).show();
               }catch (NullPointerException e){
                   Toast.makeText(Welcome.this,"请输入内容",Toast.LENGTH_SHORT).show();
               }
            }
        });
searchByAddress.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
                if(geoCodeResult.error==SearchResult.ERRORNO.NO_ERROR){
                    LatLng destination = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
                    OverlayOptions destinationOption = new MarkerOptions()
                            .position(destination).
                                    icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_marka));
                    baiduMap.addOverlay(destinationOption);
                    baiduMap.addOverlay(myLocationOption);
                }else {
                    Toast.makeText(Welcome.this,"查询失败",Toast.LENGTH_SHORT).show();
                    baiduMap.addOverlay(myLocationOption);
                }
            }

            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

            }
        });

 

在做这个的时候被坑了的地方,一个就是AutoCompleteTextView这个控件需要适配器,我在适配器的布局文件里加入了LearLayout标签,然后把TextView放入里面,导致之前怎么都出不来这个推荐列表,

另外就是没查询一个.就必须把之前的存放搜索结果的List进行清空,项目源码我都放到GitHub上了,在博客标题下就是,只不过这个项目还没有完结,之后再慢慢更新吧

AutoCompleteTextView搭配PoiSearch的使用

标签:col   else   项目   ble   ddr   search   java   str   ada   

原文地址:https://www.cnblogs.com/Yintianhao/p/9350316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!