关于百度地图

        百度地图


        用户输入获取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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值