您的位置:首页 > 移动开发 > Android开发

android 百度地图 在线建议查询

2015-12-07 16:53 495 查看
官方demo中,在线建议查询的activity叫PoiSearchDemo。

用的是AutoCompleteTextView 这个控件,我觉得不怎么好,用的listview。体验会比AutoCompleteTextView好很多。

架构可能有略微差别 initComponents() 可以当作是onCreate。

package com.zshzkp.wolaiyun.ui;

import java.util.List;

import android.content.Intent;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.search.core.CityInfo;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;
import com.baidu.mapapi.search.sug.OnGetSuggestionResultListener;
import com.baidu.mapapi.search.sug.SuggestionResult;
import com.baidu.mapapi.search.sug.SuggestionSearch;
import com.baidu.mapapi.search.sug.SuggestionSearchOption;
import com.zshzkp.wolaiyun.R;
import com.zshzkp.wolaiyun.base.BaseActivity;
import com.zshzkp.wolaiyun.model.AdapterBean;
import com.zshzkp.wolaiyun.util.PoiOverlay;
public class ChooseAddrActivity extends BaseActivity implements
OnGetPoiSearchResultListener, OnGetSuggestionResultListener {
//	private MessageAdapter sugAdapter = null;
private ListView listView;
private int load_Index = 0;
private List<AdapterBean> list;
private EditText keyWorldsView;
private PoiSearch mPoiSearch = null;
private SuggestionSearch mSuggestionSearch = null;
private BaiduMap mBaiduMap = null;
private ArrayAdapter<String> sugAdapter1 = null;
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
@Override
public int getContentViewId() {
// TODO Auto-generated method stub
return R.layout.activity_choose_addr;
}

@Override
public int getTitleBarId() {
// TODO Auto-generated method stub
return -1;
}

@Override
protected String getActivityTitleTxt() {
// TODO Auto-generated method stub
return "选择地址";
}

@Override
public void initComponents() {
setTitleBarAction();
keyWorldsView=(EditText) findViewById(R.id.CHOOSE_AutoCompleteTextView);
listView=(ListView) findViewById(R.id.chooseaddr_listview_1);

// 初始化搜索模块,注册搜索事件监听
mPoiSearch = PoiSearch.newInstance();
mPoiSearch.setOnGetPoiSearchResultListener(this);
mSuggestionSearch = SuggestionSearch.newInstance();
mSuggestionSearch.setOnGetSuggestionResultListener(this);
sugAdapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line);
//				sugAdapter = new MessageAdapter(this, list);
listView.setAdapter(sugAdapter1);
/**
* 当输入关键字变化时,动态更新建议列表
*/
keyWorldsView.addTextChangedListener(new TextWatcher() {

@Override
public void afterTextChanged(Editable arg0) {

}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {

}

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {

/**
* 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新
*/
mSuggestionSearch
.requestSuggestion((new SuggestionSearchOption())
.keyword(cs.toString()).city("上海"));
listView.setAdapter(sugAdapter1);
}
});

listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
String string=	sugAdapter1.getItem(position);
keyWorldsView.setText(string);
}

});
Button button =(Button) findViewById(R.id.AutoCompleteTextView_button);
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
String string=keyWorldsView.getText().toString();
Intent intent =new Intent();
intent.putExtra("Key", string);
setResult(10000, intent);
finish();
}
});
}

@Override
public void loadData() {
// TODO Auto-generated method stub

}

@Override
public boolean isResumeLoad() {
// TODO Auto-generated method stub
return false;
}
public void goToNextPage(View v) {
load_Index++;
}

public void onGetPoiResult(PoiResult result) {
if (result == null
|| result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
Toast.makeText(ChooseAddrActivity.this, "未找到结果", Toast.LENGTH_LONG)
.show();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.clear();
PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
for (int i = 0; i < result.getAllPoi().size(); i++) {
Log.e("TAG", ""+result.getAllPoi().get(i).location.longitude);
}
overlay.addToMap();
overlay.zoomToSpan();

return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
mBaiduMap.clear();
PoiOverlay overlay = new MyPoiOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(result);
for (int i = 0; i < result.getAllPoi().size(); i++) {
Log.e("TAG", ""+result.getAllPoi().get(i).location.longitude);
}
overlay.addToMap();
overlay.zoomToSpan();

return;
}

if (result.error == SearchResult.ERRORNO.AMBIGUOUS_KEYWORD) {

// 当输入关键字在本市没有找到,但在其他城市找到时,返回包含该关键字信息的城市列表
String strInfo = "在";
for (CityInfo cityInfo : result.getSuggestCityList()) {
strInfo += cityInfo.city;
strInfo += ",";
}
strInfo += "找到结果";
Toast.makeText(ChooseAddrActivity.this, strInfo, Toast.LENGTH_LONG)
.show();
}

}

public void onGetPoiDetailResult(PoiDetailResult result) {
if (result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(ChooseAddrActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(ChooseAddrActivity.this, result.getName() + ": " + result.getAddress(), Toast.LENGTH_SHORT)
.show();
}
}

@Override
public void onGetSuggestionResult(SuggestionResult res) {
if (res == null || res.getAllSuggestions() == null) {
return;
}
sugAdapter1.clear();
for (SuggestionResult.SuggestionInfo info : res.getAllSuggestions()) {
if (info.key != null)
sugAdapter1.add(info.key);
//						Log.e("TAGGG", ""+info.pt.latitude);

}
sugAdapter1.notifyDataSetChanged();
}
private class MyPoiOverlay extends PoiOverlay {

public MyPoiOverlay(BaiduMap baiduMap) {
super(baiduMap);
}

@Override
public boolean onPoiClick(int index) {
super.onPoiClick(index);
PoiInfo poi = getPoiResult().getAllPoi().get(index);
// if (poi.hasCaterDetails) {
mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())
.poiUid(poi.uid));
// }
return true;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: