项目需要 需要用到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搜索实现多项选择的更多相关文章

  1. web开发如何使用高德地图API(二)结合输入提示和POI搜索插件

    说两句: 以下内容除了我自己写的部分,其他部分在高德开放平台都有(可点击外链访问). 我所整理的内容以实际项目为基础希望更有针对性的,更精简. 点击直奔主题. 准备工作: 首先,注册开发者账号,成为高 ...

  2. POI搜索简介

    用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的 ...

  3. 百度poi搜索

    package baidumapsdk.demo.search; import android.os.Bundle; import android.support.v4.app.FragmentAct ...

  4. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  5. Android中的AlertDialog使用示例四(多项选择确定对话框)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...

  6. Android学习笔记之使用百度地图实现Poi搜索

    PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询   百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...

  7. WPF 多项选择下拉菜单

    背景 项目中有一个多项选择筛选的功能, 由于筛选条件太多, 用户又习惯在平板上进行操作, 所以要求我们把checkbox 放到一个combobox里面, 然后checkbox的选项要在combobox ...

  8. iOS开发——UI篇OC篇&UITableView多项选择

    UITableView多项选择 自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableV ...

  9. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文:[高德地图API]从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址解析,公 ...

随机推荐

  1. 2019.01.13 loj#6515. 贪玩蓝月(线段树分治+01背包)

    传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi​,vi​),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODM ...

  2. 2018.12.22 bzoj3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)

    传送门 题意简述:给出一棵trietrietrie树,每个点表示一个字符,求树上所有路径组成的不同字串数.(叶子数≤20\le 20≤20) 由于有一个神奇的条件,考虑以每一个叶子为树根统计每个点到树 ...

  3. vi三种模式的切换

    基础上vi/vim共分为三种模式,分别是命令模式,输入模式和底线命令模式. 一.命令模式 用户刚刚启动vi/vim,便进入了命令模式. 在此状态下敲击键盘动作会被vim识别为命令,而非输入字符.比如我 ...

  4. Docker技术入门与实战(文摘)

    第一部分 基础入门 第1章 初识容器与Docker 第2章 核心概念与安装配置 第二部分 实战案例 第三部分 进阶技能 第四部分 开源项目

  5. VC播放mp3的方法

    1.使用msi库 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") ....... //打开文件 MCI_O ...

  6. 修改oracle用户密码为永不过期

    错误提示:ORA-28001: the password has expired (DBD ERROR: OCISessionBegin) 解决方法:修改密码为永不过期 (1)查看用户的proifle ...

  7. MongoDB-环境搭建

    1.下载并安装MongoDB服务 下载地址:mongodb-win32-x86_64-2008plus-ssl-3.2.8-signed 可直接运行mongod命令启动MongoDB服务器,也可以将M ...

  8. #微码分享#C++变参字符串格式化函数format_string

    在C和C++中,变参格式化函数虽然非类型安全,但却十分便利,因为得到广泛使用.对于常见的size_t类型要用“%zu”,ssize_t用”%zd“,int64_t用“% ”PRId64,uint64_ ...

  9. Forward团队-爬虫豆瓣top250项目-代码设计规范

    组长地址:http://www.cnblogs.com/mazhuangmz/p/7603641.html 成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 1.缩进采用一个Tab键 2.大括号:如: ...

  10. bzoj2938(ac自动机)

    刚学了ac自动机,去hzwer上找了道练习题: 串是安全的就说明ac自动机不会找到匹配,考虑ac自动机的匹配过程: 我们把val等于1的点删掉和fail指针指向被删掉的点删掉: 如果剩下的图有环,就有 ...