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搜素,输入提示,地址解析,公 ...
随机推荐
- 2018.11.24 poj3261Milk Patterns(后缀数组)
传送门 后缀数组经典题. 貌似可以用二分答案+后缀数组? 我自己yyyyyy了一个好写一点的方法. 直接先预处理出heightheightheight数组. 然后对于所有连续的k−1k-1k−1个he ...
- p标签在div中垂直居中,并且div高度随着p标签文字内容的变化而变化
1.div设置flex布局 div{ display: flex; align-items: center; } 2.div不要设置height,设置min-height
- Win7 VS2013环境编译Lua5.3.1
主要参考这篇文章,原文有几个错误顺便改正了. 在Windows下使用Visual Studio编译Lua5.3 写本文时Lua官方网站放出的新版本为5.3.1,然后我不知道为啥,神奇的国内不能访问Lu ...
- Amaze UI 云适配
Amaze UI 云适配 陈本峰 一中,中科大 香港科大
- laravel 5.1 使用Eloquent ORM 操作实例
Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动. 每个数据库表对应一个模型文件. 数据库配置 .env文件(也可以直接修改config/da ...
- tomcat部署项目访问不加项目名方法
直接主题:tomcat部署项目访问不加项目名方法是打开tomcat的conf目录下server.xml文件 加入 <Context path="" docBase=" ...
- Java EE JAR包的说明
在java ee的开发中,jar文件是工程的基础,下面转载了网上兄弟一篇文章,简单介绍了一下,java ee中常用的jar文件的说明: activation.jar 与javaMail有关的jar包, ...
- 6609 - Minimal Subarray Length
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- CentOS 6 安装Redmine
Redmine是一个灵活的项目管理web应用,采用Ruby on Rails框架开发.Redmine是典型的web 2.0网站,项目管理系统的后起之秀.Redmine支持多项目,灵活的角色权限管理,灵 ...
- USTC《现代软件工程》春季学期——第一次个人作业:词频统计
截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...