265.高德地图的使用---输入内容自动提示(5)

mac2024-02-01  42

输入提示是指根据用户输入的关键词,给出相应的提示信息,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验。如:输入“方恒”,提示“方恒国际中心A座”,“方恒购物中心”等。

实现输入提示的步骤如下: 1、继承 InputtipsListener 监听。 2、构造 InputtipsQuery 对象,通过 InputtipsQuery(java.lang.String keyword, java.lang.String city) 设置搜索条件。

//第二个参数传入null或者“”代表在全国进行检索,否则按照传入的city进行检索 InputtipsQuery inputquery = new InputtipsQuery(newText, city); inputquery.setCityLimit(true);//限制在当前城市

3、构造 Inputtips 对象,并设置监听。

Inputtips inputTips = new Inputtips(InputtipsActivity.this, inputquery); inputTips.setInputtipsListener(this);

4、调用 PoiSearch 的 requestInputtipsAsyn() 方法发送请求。

inputTips.requestInputtipsAsyn();

5、通过回调接口 onGetInputtips 解析返回的结果,获取输入提示返回的信息。 6、说明: 1)在回调中解析 tipList,获取输入提示词的相关信息。 2)tipList 数组中的对象是 Tip ,Tip 类中包含 PoiID、Adcode、District、Name 等信息。 注意:

    a 、由于提示中会出现相同的关键字,但是这些关键字所在区域不同,使用时可以通过 tipList.get(i).getDistrict() 获得区域,也可以在提示时在关键字后加上区域。     b、当 Tip 的 getPoiID() 返回空,并且 getPoint() 也返回空时,表示该提示词不是一个真实存在的 POI,这时区域、经纬度参数都是空的,此时可根据该提示词进行POI关键词搜索     c、当 Tip 的 getPoiID() 返回不为空,但 getPoint() 返回空时,表示该提示词是一个公交线路名称,此时用这个id进行公交线路查询。     d、当 Tip 的 getPoiID() 返回不为空,且 getPoint() 也不为空时,表示该提示词一个真实存在的POI,可直接显示在地图上。 3)返回结果成功或者失败的响应码。1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)

@Override public void onGetInputtips(final List<Tip> tipList, int rCode) { //通过tipList获取Tip信息 }

范例:绑定attv控件 自动搜索高德地图的兴趣点列表 自动弹出输入提示列表

//绑定attv控件 自动搜索高德地图的兴趣点列表 自动弹出输入提示列表 protected void initAutoCompeleteTextView() { //给attv控件设置一个阈值 _attv_dstAddr.setThreshold(1); //给autocompleteTextView绑定自动补齐功能 _attv_dstAddr.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) { //当文本内容发生改变的时候 调用此回调函数 //从高德的服务器获取有关跟关键字匹配的poi名称的数据 //(1) 得到要搜索的关键字 final String keyword = _attv_dstAddr.getText().toString(); if(keyword == null || keyword.length() ==0) { Log.e("Amap", "search keyword == null"); return; } //(2) 创建一个query 查询所有tips的条件 InputtipsQuery query = new InputtipsQuery(keyword, _city); //(3) 创建一个InputTips 查询句柄 Inputtips search = new Inputtips(getApplicationContext(), query); //(4) 给InputTips 设定回调函数 search.setInputtipsListener(new Inputtips.InputtipsListener() { @Override public void onGetInputtips(List<Tip> list, int i) { if (i != 1000) { Log.e("Amap", "search input tips error i = "+ i); return; } // 1 应该从服务器获取能够匹配的 单词集合 ArrayList<String> poiList = new ArrayList<String>(); /* poiList.add("gailun"); poiList.add("gailun1"); poiList.add("gailun2"); poiList.add("gailun3"); poiList.add("gailun4"); poiList.add("gailun5"); */ for (int index = 0; index < list.size(); index++) { Log.e("Amap", "通过 "+keyword +"匹配到的tips 有 "+list.get(index).getName()); poiList.add(list.get(index).getName()); } // 2 给autoCompleteTextView 设置一个适配器Adapter ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, poiList); // 3 将Adapter 和 给autoCompleteTextView 相关联 _attv_dstAddr.setAdapter(adapter); // 4 触发adapter 触发控件显示 单词集合 adapter.notifyDataSetChanged(); } }); //(5) 开启InputTips 向服务器发送查询请求 search.requestInputtipsAsyn(); } @Override public void afterTextChanged(Editable s) { } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_passenger); initUI(); createMap(savedInstanceState); doLocation(); doSerarchPOI(); initAutoCompeleteTextView(); }

完整代码

链接:https://lbs.amap.com/api/android-sdk/guide/map-data/poi

最新回复(0)