输入提示是指根据用户输入的关键词,给出相应的提示信息,将最有可能的搜索词呈现给用户,以减少用户输入信息,提升用户体验。如:输入“方恒”,提示“方恒国际中心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();
}
完整代码