AutoCompleteTextView搭配Poi搜索实现多项选择
项目需要 需要用到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搭配Poi搜索实现多项选择的更多相关文章
- web开发如何使用高德地图API(二)结合输入提示和POI搜索插件
说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...
- POI搜索简介
用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的 ...
- 百度poi搜索
package baidumapsdk.demo.search; import android.os.Bundle; import android.support.v4.app.FragmentAct ...
- 高德地图-搜索服务-POI搜索
高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...
- Android中的AlertDialog使用示例四(多项选择确定对话框)
在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...
- Android学习笔记之使用百度地图实现Poi搜索
PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询 百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...
- WPF 多项选择下拉菜单
背景 项目中有一个多项选择筛选的功能, 由于筛选条件太多, 用户又习惯在平板上进行操作, 所以要求我们把checkbox 放到一个combobox里面, 然后checkbox的选项要在combobox ...
- iOS开发——UI篇OC篇&UITableView多项选择
UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...
- 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索
原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...
随机推荐
- 03 编写URL规则
3-1 URL编写规则 # 在每个App中设置独立的静态资源和模板文件并添加一个空白内容的urls.py文件. # 当程序收到用户请求的时候,首先在根目录的urls.py查找该URL属于哪个APP,然 ...
- C语言编程题
1.将整形a的第m位赋值到整形b的第n位 int fun4(int a, int m, int b, int n) { a = (a>>m) & ;//将a的第m位取出,为1或0, ...
- CString成员函数详解[转]
1.构造函数(常用) CString( const unsigned char* psz ); 例:char s[]="abcdef"; cha ...
- div配景图片全div显示
<div class="face-boy" style="width:86px;height:92px;background: url('/${userProfil ...
- vmware虚拟机centOs安装教程
1安装vmware 虚拟机软件 1.解压vmware安装 汉化vmware虚拟机 复制注册码,并填写进vmware 2安装linux(centos)虚拟机 1. 点击文件----->新建虚拟机 ...
- Qt_简介
Qt简介: 1990 开发 1991 发布Qt 1.0. 公司:Trolltech (奇趣科技) 1997 Qt被用来开发Linux桌面KDE 2008 被Nokia收购 2012 被转让给Digia ...
- js 判断字符串中是否包含某个字符串(转载)
from : https://www.cnblogs.com/ooo0/p/7741651.html String对象的方法 方法一: indexOf() (推荐) var str = " ...
- SRM474
250pt 题意:在一个N维的空间里,有一个人开始在原点,现在给出N<=50个指令序列,每个指令序列为某一维+1或者减一,问是否经过某个点至少2次. 思路:操作很小,直接模拟判断即可 code: ...
- android延时弹出软键盘
searchEditView.setFocusable(true); searchEditView.setFocusableInTouchMode(true); searchEditView.requ ...
- cmd如何进入d盘
首先打开CMD 点开始 运行输入 CMD 在CMD窗口中输入 CD\(就是返回根目录) 回车 在输入 D: 即可在D盘操作状态