android 百度地图 在线建议查询

官方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;
		}
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值