高德地图检索的简单封装

项目中开发终于开始研究到地图了,当发现项目中一个页面定位,检索,页面绘制,路径规划都用到了,看吧这个activity不用看了,密密麻麻的我是受不了了,赶紧把各个功能抽离一下。

1.根据输入进行自动poi检索  (我这也是根据项目需要加入了自己的view和适配器,各位可以根据自己的实际情况来)

/**
 * Created by HLD on 2016/11/23.
 * Contact E-mail:[email protected] ; QQ:1185291074
 * 高德地图之根据输入框自动检索
 */
public class InPutTipsUtil implements Inputtips.InputtipsListener {
    private Context mContext;
    private static InPutTipsUtil instance;
    private Inputtips mInputTips;
    private InputtipsQuery inputtipsQuery;

    private LocSearchAdapter mAdapter;

    private View mList;


    private InPutTipsUtil(Context context) {
        mContext = context;
    }

    public static InPutTipsUtil getInstance(Context context, LocSearchAdapter adapter) {
        if (instance == null) {
            instance = new InPutTipsUtil(context);
        }
        //单例情况,多次进入DestinationActivity传进来的RecomandAdapter对象会不是同一个
        instance.setAdapter(adapter);
        return instance;
    }

    /**
     * @param key  搜索关键字
     * @param city //第二个参数默认代表全国,也可以为城市区号
     */
    public void search(String key, String city) {
        inputtipsQuery = new InputtipsQuery(key, city);
        inputtipsQuery.setCityLimit(true);
        mInputTips = new Inputtips(mContext, inputtipsQuery);
        mInputTips.setInputtipsListener(this);
        mInputTips.requestInputtipsAsyn();//调用 PoiSearch 的 requestInputtipsAsyn() 方法发送请求
    }

    /**
     * @param context
     * @param adapter
     * @param view 对view进行操作控制 可根据自己的情况更换view
     * @return
     */
    public static InPutTipsUtil getInstance(Context context, LocSearchAdapter adapter, View view) {
        if (instance == null) {
            instance = new InPutTipsUtil(context);
        }
        //单例情况,多次进入DestinationActivity传进来的RecomandAdapter对象会不是同一个
        instance.setAdapter(adapter);
        instance.setListView(view);
        return instance;
    }

    private void setListView(View listView) {
        mList = listView;
    }

    private void setAdapter(LocSearchAdapter adapter) {
        mAdapter = adapter;
    }

    /**
     * 通过回调接口 onGetInputtips 解析返回的结果,获取输入提示返回的信息。
     *
     * @param tips
     * @param resultCode 返回结果成功或者失败的响应码。1000为成功,其他为失败
     */
    @Override
    public void onGetInputtips(List<Tip> tips, int resultCode) {
        if (resultCode == 1000 && tips != null) {
            List<SearchData> datas = new ArrayList<>();
            for (Tip tip : tips) {
                SearchData item = new SearchData();
                item.setPoint(tip.getPoint());
                item.setAddress(tip.getAddress());
                item.setName(tip.getName());
                datas.add(item);
            }
            if (mList != null) {//对listview有操作时
                if (datas.size() > 0) {
                    mList.setVisibility(View.VISIBLE);
                    mAdapter.setGroup(datas);
                } else {
                    mList.setVisibility(View.GONE);
                }
            } else {
                mAdapter.setGroup(datas);
            }
        } else {
            //响应失败处理
            if (mList != null) {
                mList.setVisibility(View.GONE);
            }
        }
        //TODO 可以根据app自身需求对查询错误情况进行相应的提示或者逻辑处理
    }
}
 
 
 
 

猜你喜欢

转载自blog.csdn.net/My_Jack/article/details/53308800