地图位置搜索

Ø  知识点:ArrayList/arrayAdapter、输入提示、搜索

Ø  实现详情

1.      利用控件AutoCompleteTextView,作为适配器,放置输入提示列表,并在其中text内容发生改变时,监听返回输入建议


2.     搜索功能:点击“搜索”按钮,实现搜索功能,监听搜索结果返回,发送请求进行搜索,在点击时要记得清除定位

/**
 搜索:poi搜索功能
 */

    setUpSearch();
private void setUpSearch() {
    search = (Button) findViewById(R.id.search);
    search.setOnClickListener(this);
    editList = (AutoCompleteTextView) findViewById(R.id.searchLocation);
    editList.addTextChangedListener(this);
    aMap.setOnMarkerClickListener(this);// 添加点击marker监听事件
    aMap.setInfoWindowAdapter(this);// 添加显示infowindow监听事件

}
/**
 * 开始进行poi搜索
 */
private void search() {
    keyWord=editList.getText().toString().trim();
    if (keyWord != null) {
        int currentPage = 0;
        query = new PoiSearch.Query(keyWord, "", "");
        // keyWord表示搜索字符串,第二个参数表示POI搜索类型,默认为:生活服务、餐饮服务、商务住宅
        // cityCode表示POI搜索区域,(这里可以传空字符串,空字符串代表全国在全国范围内进行搜索)
        query.setPageSize(10);// 设置每页最多返回多少条poiitem
        query.setPageNum(currentPage);// 设置查第一页

        poiSearch = new PoiSearch(this, query);
        // poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude, longitude), 6000));//设置搜索中心点及范围
        poiSearch.setOnPoiSearchListener(this);// 设置数据返回的监听器
        poiSearch.searchPOIAsyn();//调用 PoiSearch 的searchPOIAsyn() 方法发送请求,开始搜索
    }else{
        Toast.makeText(MainActivity.this, "输入为空!", Toast.LENGTH_LONG).show();
    }
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    keyWord = s.toString().trim();
    if (keyWord != null) {
        InputtipsQuery inputquery = new InputtipsQuery(keyWord, "");
        Inputtips inputTips = new Inputtips(MainActivity.this, inputquery);
        inputTips.setInputtipsListener(this);
        inputTips.requestInputtipsAsyn();//调用PoiSearch的requestInputtipsAsyn()方法发送请求

    }else {
        Toast.makeText(MainActivity.this, "输入为空!", Toast.LENGTH_LONG).show();
    }


}

@Override
public void afterTextChanged(Editable s) {

}
@Override
public void onGetInputtips(List<Tip> tipList, int rCode) {//输入提示回调

    if (rCode == 1000) {// 正确返回
        List<String> listString = new ArrayList<String>();
        for (int i = 0; i < tipList.size(); i++) {
            listString.add(tipList.get(i).getName());
        }
        ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(getApplicationContext(),
                                                    R.layout.input, listString);
        editList.setAdapter(aAdapter);
        aAdapter.notifyDataSetChanged();
    } else {
        Log.e("MainActivity", " ErrCode:" + rCode);
    }
}


@Override
public void onPoiItemSearched(PoiItem poiItem, int errorCode) {

}

@Override
public void onPoiSearched(PoiResult result, int rCode) {
    if (rCode ==1000) {
        if (result != null && result.getQuery() != null) {// 搜索poi的结果
            if (result.getQuery().equals(query)) {// 是否是同一条
                poiResult = result;
                poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始
                List<SuggestionCity> suggestionCities = poiResult
                        .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
                if (poiItems != null && poiItems.size() > 0) {
                    aMap.clear();// 清理之前的图标
                    PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
                    poiOverlay.removeFromMap();
                    poiOverlay.addToMap();
                    poiOverlay.zoomToSpan();
                } else if (suggestionCities != null
                        && suggestionCities.size() > 0) {
                    showSuggestCity(suggestionCities);
                } else {
                    Toast.makeText(MainActivity.this,"没有可显示的结果",Toast.LENGTH_SHORT).show();
                }
            }
        } else {
            Toast.makeText(MainActivity.this,"没有可显示的结果",Toast.LENGTH_SHORT).show();
        }
    } else if (rCode == 27) {
        Toast.makeText(MainActivity.this,"网络错误",Toast.LENGTH_SHORT).show();
    } else if (rCode == 32) {
        Toast.makeText(MainActivity.this,"错误的Key值",Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(MainActivity.this,"其他的错误",Toast.LENGTH_SHORT).show();
    }


}

/**
 * poi没有搜索到数据,返回一些推荐城市的信息
 */
private void showSuggestCity(List<SuggestionCity> cities) {
    String infomation = "推荐城市\n";
    for (int i = 0; i < cities.size(); i++) {
        infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:"
                + cities.get(i).getCityCode() + "城市编码:"
                + cities.get(i).getAdCode() + "\n";
    }
    Toast.makeText(MainActivity.this,infomation,Toast.LENGTH_SHORT).show();

}
@Override
public boolean onMarkerClick(Marker marker) {
    marker.showInfoWindow();
    return false;
}
@Override
public View getInfoWindow(Marker marker) {
    return null;
}

@Override
public View getInfoContents(Marker marker) {
    return null;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值