百度地图
用户输入获取Suggest的方法
/**
* 当输入关键字变化时,动态更新建议列表
*/
poi_search_id.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) {
linearLayout_id.setVisibility(View.GONE);
searchNearbyProcess();// 周边兴趣点搜索,半径暂定500
int strLength = s.length();
if (strLength <= 0) {
return;
}
/**
* 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新
*/
mSuggestionSearch
.requestSuggestion((new SuggestionSearchOption())
.keyword(s.toString()).city(city));
}
@Override
public void afterTextChanged(Editable s) {
}
});
当搜索到结果后,会在下面的方法中回调
private void setInitSuggestionSearch(){
// 初始化建议搜索模块,注册建议搜索事件监听
mSuggestionSearch = SuggestionSearch.newInstance();
// * 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果
mSuggestionSearch.setOnGetSuggestionResultListener(new OnGetSuggestionResultListener() {
@Override
public void onGetSuggestionResult(SuggestionResult suggestionResult) {
if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {
return;
}
//suggest = new ArrayList<String>();
suggest = new LinkedList<String>();
for (SuggestionResult.SuggestionInfo info : suggestionResult.getAllSuggestions()) {
if (info.key != null) {
suggest.add(info.key);
}
}
SuggestionDataSet.getInstance().clearDataSetList();
SuggestionDataSet.getInstance().setDataSetList(suggest);
sugAdapter = new SuggestionPlaceAdapter(ChooseEditTextActivity.this);
// new ArrayAdapter<String>(ChooseEditTextActivity.this, android.R.layout.simple_dropdown_item_1line,
// suggest);
listView.setAdapter(sugAdapter);
sugAdapter.notifyDataSetChanged();
}
});
}
上面的SuggestionDataSet为适配器的数据源,这里对于一个适配器一般采用的办法是构造函数的时候将数据源传进去,当这样有些时候会因为在对
数据源进行remove或者add等时,由于数据源对象的不同意造成调用适配器的刷新函数不起作用,这样就需要再去进行分析对象是否是同一个。这里
SuggestionDataSet作为单独的一个类就不会有对象不同意的情况,因为当中使用的是单例模式,具体的类的代码如下,这个仅仅是个人的一个建议:
package adapter.dataset;
import java.util.ArrayList;
import java.util.List;
public class SuggestionDataSet {
private List<String> dataSetList = null;
private SuggestionDataSet(){
setInitDataSet();
}
public static SuggestionDataSet getInstance(){
return DataSetProduce.INSTANCE;
}
private static class DataSetProduce{
public static SuggestionDataSet INSTANCE = new SuggestionDataSet();
}
private void setInitDataSet(){
dataSetList = new ArrayList<String>();
}
public void setDataSetList(String param){
dataSetList.add(param);
}
public void setDataSetList(List<String> paramList){
dataSetList.addAll(paramList);
}
public void clearDataSetList(){
if (dataSetList.isEmpty()){
return;
}
dataSetList.clear();
}
public List<String> getDataSetList(){
return dataSetList;
}
}
可以看到当中的public void setDataSetList(List<String> paramList)方法参数并不使用ArrayList或者LinkedList,
原因是这两个都继承List接口,在读写方面对于性能而言,各有优劣,具体可以看我前面介绍的JAVA优化。
适配器的代码如下:
package baidumapsdk.demo.search;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.example.apical.applicationbaidumapdemo.R;
import adapter.dataset.SuggestionDataSet;
import bike.ChooseEditTextActivity;
public class SuggestionPlaceAdapter extends BaseAdapter{
private Context mContext = null;
public SuggestionPlaceAdapter(Context mContext){
this.mContext = mContext;
}
@Override
public int getCount() {
return SuggestionDataSet.getInstance().getDataSetList().size();
}
@Override
public Object getItem(int position) {
return SuggestionDataSet.getInstance().getDataSetList().get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mViewHolder = null;
if (convertView == null){
LayoutInflater mLayoutInflater = LayoutInflater.from(mContext);
convertView = mLayoutInflater.inflate(R.layout.item_listview, null);
mViewHolder = new ViewHolder();
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.place_content_text_view_id);
mViewHolder.mButton = (Button) convertView.findViewById(R.id.item_search_btn_id);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
final int paramPostion = position;
final View mView = convertView;
mViewHolder.mTextView.setText(SuggestionDataSet.getInstance().getDataSetList().get(position));
mViewHolder.mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof ChooseEditTextActivity){
((ChooseEditTextActivity) mContext).onClickInAdapterItemButton(paramPostion);
}
}
});
return convertView;
}
class ViewHolder{
public TextView mTextView;
public Button mButton;
}
}
本内容主要针对百度地图的定位,路线优化,建议起点终点输入,类似百度地图APP中骑行导航页面的样式,由于百度导航SDK暂时没有提供对于骑行导航的API,
仅用百度地图的一些API搭建了这个程序,有需要的可以下载下来查看。DEMO名称ApplicationBaiduMapDemo。
用户输入获取Suggest的方法
/**
* 当输入关键字变化时,动态更新建议列表
*/
poi_search_id.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) {
linearLayout_id.setVisibility(View.GONE);
searchNearbyProcess();// 周边兴趣点搜索,半径暂定500
int strLength = s.length();
if (strLength <= 0) {
return;
}
/**
* 使用建议搜索服务获取建议列表,结果在onSuggestionResult()中更新
*/
mSuggestionSearch
.requestSuggestion((new SuggestionSearchOption())
.keyword(s.toString()).city(city));
}
@Override
public void afterTextChanged(Editable s) {
}
});
当搜索到结果后,会在下面的方法中回调
private void setInitSuggestionSearch(){
// 初始化建议搜索模块,注册建议搜索事件监听
mSuggestionSearch = SuggestionSearch.newInstance();
// * 获取在线建议搜索结果,得到requestSuggestion返回的搜索结果
mSuggestionSearch.setOnGetSuggestionResultListener(new OnGetSuggestionResultListener() {
@Override
public void onGetSuggestionResult(SuggestionResult suggestionResult) {
if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {
return;
}
//suggest = new ArrayList<String>();
suggest = new LinkedList<String>();
for (SuggestionResult.SuggestionInfo info : suggestionResult.getAllSuggestions()) {
if (info.key != null) {
suggest.add(info.key);
}
}
SuggestionDataSet.getInstance().clearDataSetList();
SuggestionDataSet.getInstance().setDataSetList(suggest);
sugAdapter = new SuggestionPlaceAdapter(ChooseEditTextActivity.this);
// new ArrayAdapter<String>(ChooseEditTextActivity.this, android.R.layout.simple_dropdown_item_1line,
// suggest);
listView.setAdapter(sugAdapter);
sugAdapter.notifyDataSetChanged();
}
});
}
上面的SuggestionDataSet为适配器的数据源,这里对于一个适配器一般采用的办法是构造函数的时候将数据源传进去,当这样有些时候会因为在对
数据源进行remove或者add等时,由于数据源对象的不同意造成调用适配器的刷新函数不起作用,这样就需要再去进行分析对象是否是同一个。这里
SuggestionDataSet作为单独的一个类就不会有对象不同意的情况,因为当中使用的是单例模式,具体的类的代码如下,这个仅仅是个人的一个建议:
package adapter.dataset;
import java.util.ArrayList;
import java.util.List;
public class SuggestionDataSet {
private List<String> dataSetList = null;
private SuggestionDataSet(){
setInitDataSet();
}
public static SuggestionDataSet getInstance(){
return DataSetProduce.INSTANCE;
}
private static class DataSetProduce{
public static SuggestionDataSet INSTANCE = new SuggestionDataSet();
}
private void setInitDataSet(){
dataSetList = new ArrayList<String>();
}
public void setDataSetList(String param){
dataSetList.add(param);
}
public void setDataSetList(List<String> paramList){
dataSetList.addAll(paramList);
}
public void clearDataSetList(){
if (dataSetList.isEmpty()){
return;
}
dataSetList.clear();
}
public List<String> getDataSetList(){
return dataSetList;
}
}
可以看到当中的public void setDataSetList(List<String> paramList)方法参数并不使用ArrayList或者LinkedList,
原因是这两个都继承List接口,在读写方面对于性能而言,各有优劣,具体可以看我前面介绍的JAVA优化。
适配器的代码如下:
package baidumapsdk.demo.search;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.example.apical.applicationbaidumapdemo.R;
import adapter.dataset.SuggestionDataSet;
import bike.ChooseEditTextActivity;
public class SuggestionPlaceAdapter extends BaseAdapter{
private Context mContext = null;
public SuggestionPlaceAdapter(Context mContext){
this.mContext = mContext;
}
@Override
public int getCount() {
return SuggestionDataSet.getInstance().getDataSetList().size();
}
@Override
public Object getItem(int position) {
return SuggestionDataSet.getInstance().getDataSetList().get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mViewHolder = null;
if (convertView == null){
LayoutInflater mLayoutInflater = LayoutInflater.from(mContext);
convertView = mLayoutInflater.inflate(R.layout.item_listview, null);
mViewHolder = new ViewHolder();
mViewHolder.mTextView = (TextView) convertView.findViewById(R.id.place_content_text_view_id);
mViewHolder.mButton = (Button) convertView.findViewById(R.id.item_search_btn_id);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
final int paramPostion = position;
final View mView = convertView;
mViewHolder.mTextView.setText(SuggestionDataSet.getInstance().getDataSetList().get(position));
mViewHolder.mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mContext instanceof ChooseEditTextActivity){
((ChooseEditTextActivity) mContext).onClickInAdapterItemButton(paramPostion);
}
}
});
return convertView;
}
class ViewHolder{
public TextView mTextView;
public Button mButton;
}
}
本内容主要针对百度地图的定位,路线优化,建议起点终点输入,类似百度地图APP中骑行导航页面的样式,由于百度导航SDK暂时没有提供对于骑行导航的API,
仅用百度地图的一些API搭建了这个程序,有需要的可以下载下来查看。DEMO名称ApplicationBaiduMapDemo。