仿饿了么地图

package cn.locationbox.jtan.mvp.map;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.Poi;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.locationbox.jtan.R;
import cn.locationbox.jtan.base.BaseActivity;
import jtan.com.core.util.SpUtil;

public class MapActivity extends BaseActivity implements BDLocationListener, BaiduMap.OnMapStatusChangeListener {

    private MapView mMapView;
    private BaiduMap mBaiduMap;
    //POI list
    private ListView lv_near_address;
    //选择城市
    private TextView select_city;
    //地图显示
    private LinearLayout map_area;
    //搜索框
    private LinearLayout search_box, search_box_true;
    //搜索关键字输入框
    private EditText search_address;
    //建议查询列表
    private ListView search_list;
    //建议查询
    private SuggestionSearch mSuggestionSearch;
    //搜索的列表adapter
    private SuggestionAdapter mAdapter;
    //    private String poiCity;
//    private String poiDistrict;
    //搜索数据源
    private List<String> mListCitys = new ArrayList<>();
    private List<String> mListKeys = new ArrayList<>();
    private List<PoiDetailResult> mListInfos = new ArrayList<>();

//    private List<PoiInfo> mListInfos;

    //进行反地理编码
    private GeoCoder geoCoder;
    //是否第一次定位
    private boolean IsFirstLoc = true;
    //    地图状态改变,移动地图,更改城市
    private boolean IsFirstCity = true;
    //  定位
    public LocationClient mLocationClient = null;
    //定位设置
    private MyLocationConfiguration.LocationMode mCurrentMode;
    //当前城市
    private String currentCity;
    //当前区
    private String district;

    //POI检索
//    private PoiSearch mPoiSearch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_map);
        initView();
        initMap();
        imm = (InputMethodManager) MapActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
    }

    private void initMap() {
//        在线建议查询(搜索框)
        mSuggestionSearch = SuggestionSearch.newInstance();
        mSuggestionSearch.setOnGetSuggestionResultListener(new OnGetSuggestionResultListener() {
            @Override
            public void onGetSuggestionResult(SuggestionResult suggestionResult) {
                if (suggestionResult == null || suggestionResult.getAllSuggestions() == null) {
                    return;
                } else {
                    mListKeys.clear();
                    mListCitys.clear();
                    mListInfos.clear();
                    //获取详细信息
                    for (SuggestionResult.SuggestionInfo info : suggestionResult.getAllSuggestions()) {

                        mListKeys.add(info.key);
                        mListCitys.add(info.city + info.district);


                        PoiSearch poiSearch = PoiSearch.newInstance();
                        poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
                            @Override
                            public void onGetPoiResult(PoiResult poiResult) {
                            }

                            @Override
                            public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
                                Log.i("=====", "onGetPoiDetailResult: " + poiDetailResult.uid);
//                                获取Place详情页检索结果
                                if (poiDetailResult.error != SearchResult.ERRORNO.NO_ERROR) {
                                    Log.i("===", "onGetPoiDetailResult: " + poiDetailResult.error);
                                    //详情检索失败
                                    // result.error请参考SearchResult.ERRORNO
                                } else {
                                    mListInfos.add(poiDetailResult);
                                    mAdapter.notifyDataSetChanged();
                                }
//
                            }

                            @Override
                            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

                            }
                        });
                        Log.i("===", "onGetSuggestionResult: " + info.uid);
                        poiSearch.searchPoiDetail((new PoiDetailSearchOption()).poiUid(info.uid));
                    }
                }

            }
        });


        //----------------------基础地图设置----------------------
        //将地图放大
        MapStatus mapstatus = new MapStatus.Builder().zoom(15).build();
        MapStatusUpdate mapupdate = MapStatusUpdateFactory.newMapStatus(mapstatus);
        mBaiduMap.setMapStatus(mapupdate);
        // 地图状态改变相关监听
        mBaiduMap.setOnMapStatusChangeListener(this);

        //定位获取周边信息
        geoCoder = GeoCoder.newInstance(); //GeoCoder对象的实例化
        geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {

            }

            // 拿到变化地点后的附近地址
            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
                district = reverseGeoCodeResult.getAddressDetail().district;

                final List<PoiInfo> poiInfos = reverseGeoCodeResult.getPoiList();
                if (poiInfos != null && !"".equals(poiInfos)) {
                    PoiAdapter poiAdapter = new PoiAdapter(poiInfos);
                    lv_near_address.setAdapter(poiAdapter);
                    lv_near_address.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


                            Intent intent = new Intent(MapActivity.this, FinishActivity.class);
                            startActivity(intent);
                            finish();
                        }
                    });
                }
            }
        });


        initLocation();
    }

    private void initLocation() {

        //----------------------地图定位----------------------
        // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);
        // 定位图层显示方式
        mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;
        mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));
        mLocationClient = new LocationClient(this);
        // 注册定位监听
        mLocationClient.registerLocationListener(this);
        // 定位选项
        LocationClientOption option = new LocationClientOption();
        /**
         * coorType - 取值有3个: 返回国测局经纬度坐标系:gcj02 返回百度墨卡托坐标系 :bd09 返回百度经纬度坐标系
         * :bd09ll
         */
        option.setCoorType("bd09ll");
        // 设置是否需要地址信息,默认为无地址
        option.setIsNeedAddress(true);
        // 设置是否需要返回位置语义化信息,可以在BDLocation.getLocationDescribe()中得到数据,ex:"在天安门附近",
        // 可以用作地址信息的补充
        option.setIsNeedLocationDescribe(true);
        // 设置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到数据
        option.setIsNeedLocationPoiList(true);
        /**
         * 设置定位模式 Battery_Saving 低功耗模式 Device_Sensors 仅设备(Gps)模式 Hight_Accuracy
         * 高精度模式
         */
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        // 设置是否打开gps进行定位
        option.setOpenGps(true);
        // 设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
        option.setScanSpan(1000);
        // 设置 LocationClientOption
        mLocationClient.setLocOption(option);
        IsFirstCity = true;
        // 开始定位
        mLocationClient.start();
    }

    private void initView() {
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        lv_near_address = (ListView) findViewById(R.id.lv_near_address);
        select_city = (TextView) findViewById(R.id.select_city);
        map_area = (LinearLayout) findViewById(R.id.map_area);
        search_list = (ListView) findViewById(R.id.search_list);
        search_box = (LinearLayout) findViewById(R.id.search_box);
        search_box_true = (LinearLayout) findViewById(R.id.search_box_true);
        search_address = (EditText) findViewById(R.id.search_address);

        //搜索绑定adapter
        mAdapter = new SuggestionAdapter(mListCitys, mListKeys, mListInfos);
        search_list.setAdapter(mAdapter);

        search_address.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) {
                if (s.length() <= 0) {
                    return;
                } else {
//                    /**
//                     * 使用POI检索关键字
//                     */
//                    mPoiSearch.searchInCity(new PoiCitySearchOption().city(currentCity).keyword(s.toString()).pageNum(30));
//                    在线建议查询
                    mSuggestionSearch.requestSuggestion((new SuggestionSearchOption())
                            .keyword(s.toString())
                            .city(currentCity));
                }


            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        search_address.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                return (event.getKeyCode() == KeyEvent.KEYCODE_ENTER);
            }
        });
        search_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MapActivity.this, FinishActivity.class);
                intent.putExtra("city", mListCitys.get(position));
                intent.putExtra("selectAddress", mListInfos.get(position).getAddress());
                intent.putExtra("lat", mListInfos.get(position).getLocation().latitude);
                intent.putExtra("lon", mListInfos.get(position).getLocation().longitude);
                startActivity(intent);
                finish();
            }
        });
    }

    private InputMethodManager imm;

    public void ClickView(View view) {
        switch (view.getId()) {
            case R.id.back:
                finish();
                break;
            case R.id.select_city:
                Intent intent = new Intent(MapActivity.this, CityActivity.class);
                intent.putExtra("city", select_city.getText().toString());
                startActivityForResult(intent, 200);
                break;
            //点击搜索展示框
            case R.id.search_box:
                //展示不显示,地图不显示,显示列表
                search_box.setVisibility(View.INVISIBLE);
                search_box_true.setVisibility(View.VISIBLE);
                map_area.setVisibility(View.INVISIBLE);
                search_list.setVisibility(View.VISIBLE);
                // 获取编辑框焦点
                search_address.setFocusable(true);
                //打开软键盘
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                search_address.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                                                             @Override
                                                             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                                                                 if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                                                                     //TODO
                                                                     return true;
                                                                 }
                                                                 return false;
                                                             }
                                                         }

                );

                //进行关键字检索
                break;
            //取消
            case R.id.cancel:
                search_address.setText("");
//                search_address.setFocusable(false);
                //关闭软键盘
                imm.hideSoftInputFromWindow(search_address.getWindowToken(), 0);
                mListCitys.clear();
//                mListInfos.clear();
                mListKeys.clear();
                mAdapter.notifyDataSetChanged();
                search_box_true.setVisibility(View.INVISIBLE);
                search_box.setVisibility(View.VISIBLE);
                map_area.setVisibility(View.VISIBLE);
                search_list.setVisibility(View.INVISIBLE);
                break;
            case R.id.deleteText:
                search_address.setText("");
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 200) {
            if (resultCode == 200) {
                String city = data.getStringExtra("city");
                float lat = data.getFloatExtra("lat", 0);
                float lon = data.getFloatExtra("lon", 0);
                select_city.setText(city);

                LatLng point = new LatLng(lat, lon);
                MapStatus mMapStatus = new MapStatus.Builder()
                        .target(point)
                        .zoom(16)
                        .build();
                //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
                MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
                //改变地图状态
                mBaiduMap.setMapStatus(mMapStatusUpdate);

                // 发起反地理编码请求(经纬度->地址信息)
                ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption();
                // 设置反地理编码位置坐标
                reverseGeoCodeOption.location(point);
                geoCoder.reverseGeoCode(reverseGeoCodeOption);
            }
            if (resultCode == 400) {
                IsFirstLoc = true;
                IsFirstCity = true;
                // 开始定位
                mLocationClient.start();
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }


    //BDLocationListener 监听
    @Override
    public void onReceiveLocation(BDLocation location) {

        // 如果bdLocation为空或mapView销毁后不再处理新数据接收的位置
        if (location == null || mBaiduMap == null) {
            return;
        }


        LatLng point = new LatLng(location.getLatitude(), location.getLongitude());
        // 获取城市,待会用于POISearch
        currentCity = location.getCity();
        select_city.setText(currentCity);
        // 是否是第一次定位
        if (IsFirstLoc) {
            IsFirstLoc = false;
            //定义地图状态
            MapStatus mMapStatus = new MapStatus.Builder()
                    .target(point)
                    .zoom(16)
                    .build();
            //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
            //改变地图状态
            mBaiduMap.setMapStatus(mMapStatusUpdate);

            // 发起反地理编码请求(经纬度->地址信息)
            ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption();
            // 设置反地理编码位置坐标
            reverseGeoCodeOption.location(point);
            geoCoder.reverseGeoCode(reverseGeoCodeOption);
        }


    @Override
    public void onConnectHotSpotMessage(String s, int i) {

    }

    //OnMapStatusChangeListener
    @Override
    public void onMapStatusChangeStart(MapStatus mapStatus) {

    }

    @Override
    public void onMapStatusChange(MapStatus mapStatus) {

    }

    @Override
    public void onMapStatusChangeFinish(MapStatus mapStatus) {
        if (IsFirstCity) {
            IsFirstCity = false;
            select_city.setText(currentCity);
        }

        // 地图操作的中心点
        LatLng cenpt = mapStatus.target;
        geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(cenpt));
    }


    class SuggestionAdapter extends BaseAdapter {
        private List<String> mKeys;//key
        private List<String> mCitys;//city
        private List<PoiDetailResult> mListInfos;

        public SuggestionAdapter(List<String> citys, List<String> keys, List<PoiDetailResult> infos) {
            this.mKeys = keys;
            this.mCitys = citys;
            this.mListInfos = infos;
        }

        @Override
        public int getCount() {
            return mListInfos.size();
        }

        @Override
        public Object getItem(int position) {
            return mListInfos.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_poi, parent, false);
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.area.setText(mKeys.get(position));
            holder.address.setText(mListInfos.get(position).getAddress());
            return convertView;
        }
    }

    class PoiAdapter extends BaseAdapter {
        private List<PoiInfo> pois;

        public PoiAdapter(List<PoiInfo> pois) {
            this.pois = pois;
        }

        @Override
        public int getCount() {
            return pois.size();
        }

        @Override
        public Object getItem(int position) {
            return pois.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_poi, parent, false);
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            if (position == 0) {
                holder.isFirst.setVisibility(View.VISIBLE);
                holder.address.setTextColor(Color.parseColor("#5C6361"));
            } else {
                holder.isFirst.setVisibility(View.GONE);
                holder.address.setTextColor(Color.parseColor("#999999"));
            }
            PoiInfo poiInfo = pois.get(position);
            holder.area.setText(poiInfo.name);
            holder.address.setText(poiInfo.address);
            return convertView;
        }

    }

    class ViewHolder {
        TextView isFirst;
        TextView area;
        TextView address;

        ViewHolder(View view) {
            isFirst = (TextView) view.findViewById(R.id.isFirst);
            area = (TextView) view.findViewById(R.id.area);
            address = (TextView) view.findViewById(R.id.address);
        }
    }
}

点击城市切换

package cn.locationbox.jtan.mvp.map;

import android.content.Intent;
import android.content.res.XmlResourceParser;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.zhy.autolayout.utils.AutoUtils;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import cn.locationbox.jtan.R;
import cn.locationbox.jtan.base.BaseActivity;
import cn.locationbox.jtan.bean.City;
import cn.locationbox.jtan.util.PinYinUtil;
import jtan.com.core.util.SpUtil;

import static android.R.attr.data;

/**
 * Created by lfyan on 2017/5/9.
 */

public class CityActivity extends BaseActivity {

//    String g

    private List<City> mCitys = new ArrayList<>();
    private String[] letter = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

    //城市
    private List<City> mListCity;
    //字母
    private List<String> mListLetter;



    ListView lv; // 城市列表
    ListView lv1; //字母列表

    private List<Object> cityToLetter = new ArrayList<>();
    private TextView select_city;

    private LinearLayout search_box, search_box_true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_city);
        initData();
        handleData();
        initView();

        lv = (ListView) findViewById(R.id.listView1);
        View headerView = LayoutInflater.from(mContext).inflate(R.layout.current_city, null);
        TextView locationImg = (TextView) headerView.findViewById(R.id.locationImg);
        locationImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                setResult(400, intent);
                finish();
            }
        });
        TextView current_city = (TextView) headerView.findViewById(R.id.current_city);
        lv.addHeaderView(headerView);
        lv.setAdapter(new MyAdapter());


        lv1 = (ListView) findViewById(R.id.listView2);
        lv1.setAdapter(new MyAdapter1());
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//                lv1.setBackgroundColor(Color.parseColor("#12000000"));
                for (int i = 0; i < cityToLetter.size(); i++) {
                    if (letter[position].equals(cityToLetter.get(i))) {
                        lv.setSelection(i + 1);
                        break;
                    }
                }
            }
        });

        String city = getIntent().getStringExtra("city");
        current_city.setText(city);
    }

    private void handleData() {
        for (int i = 0; i < mListLetter.size(); i++) {
            boolean isAddLetter = false;
            for (int j = 0; j < mListCity.size(); j++) {
                if (mListCity.get(j).getFirstPinyin().equals(mListLetter.get(i))) {
                    if (isAddLetter == false) {
                        cityToLetter.add(mListLetter.get(i));
                        isAddLetter = true;
                    }
                    cityToLetter.add(mListCity.get(j));
                }
            }
        }
    }

    private void initData() {

        //得到资源中的数据流
        String fileName = "citys.xml"; //文件名字
        List<City> citys = null;
        City city = null;
        try {
            InputStream inputStream = getResources().getAssets().open(fileName);
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(inputStream, "UTF-8");
            int event = parser.getEventType();//产生第一个事件
            while (event != XmlPullParser.END_DOCUMENT) {
                switch (event) {
                    case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
                        citys = new ArrayList<City>();//初始化books集合
                        break;
                    case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
                        if ("city".equals(parser.getName())) {//判断开始标签元素是否是book
                            city = new City();
//                            city.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id
                        }
                        if (city != null) {
                            if ("name".equals(parser.getName())) {//判断开始标签元素是否是name
                                city.setName(parser.nextText());
                            } else if ("lat".equals(parser.getName())) {//判断开始标签元素是否是price
                                city.setLat(Float.parseFloat(parser.nextText()));
                            } else if ("lon".equals(parser.getName())) {
                                city.setLon(Float.parseFloat(parser.nextText()));
                            }
                        }
                        break;
                    case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
                        if ("city".equals(parser.getName())) {//判断结束标签元素是否是book
                            citys.add(city);//将book添加到books集合
                            city = null;
                        }
                        break;
                }

                event = parser.next();//进入下一个元素并触发相应事件

            }//end while
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        for (int i = 0; i < citys.size(); i++) {
            String pinyin = PinYinUtil.getPingYin(citys.get(i).getName());
            String Fpinyin = pinyin.substring(0, 1).toUpperCase();
            // 正则表达式,判断首字母是否是英文字母
            if (Fpinyin.matches("[A-Z]")) {
                citys.get(i).setFirstPinyin(Fpinyin);
            } else {
                citys.get(i).setFirstPinyin("#");
            }

        }
        List<City> sortCitys = new ArrayList<>();
        List<String> sortLetter = new ArrayList<>();

        for (int j = 0; j < letter.length; j++) {
            boolean isHaveLetter = false;
            for (int i = 0; i < citys.size(); i++) {
                if (citys.get(i).getFirstPinyin().equals(letter[j])) {
                    sortCitys.add(citys.get(i));
                    isHaveLetter = true;
                }
            }
            if (isHaveLetter) {
                sortLetter.add(letter[j]);
            }

        }

        mListCity = sortCitys;
        mListLetter = sortLetter;
    }

    private void initView() {
        select_city = (TextView) findViewById(R.id.select_city);
        String city = getIntent().getStringExtra("city");
        select_city.setText(city);
    }

    class MyAdapter1 extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return letter.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return letter[position];
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = LayoutInflater.from(CityActivity.this).inflate(R.layout.letter_list, null);
//                convertView.setOnClickListener(new View.OnClickListener() {
//                    @Override
//                    public void onClick(View v) {
                        Toast.makeText(mContext, letter[position], Toast.LENGTH_SHORT).show();
//
//                    }
//                });
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.letterListTextView.setText(letter[position]);
            return convertView;
        }

    }

    class MyAdapter extends BaseAdapter {

        final static int TYPE_1 = 1;
        final static int TYPE_2 = 2;

        @Override
        public int getCount() {
            return cityToLetter.size();
        }

        @Override
        public Object getItem(int position) {
            return cityToLetter.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public int getItemViewType(int position) {
            for (int i = 0; i < letter.length; i++) {
                if (cityToLetter.get(position).equals(letter[i])) {
                    return TYPE_1;
                }
            }
            return TYPE_2;
        }

        @Override
        public int getViewTypeCount() {
            return 3;
        }

        @Override
        public View getView(final int position, View convertView, final ViewGroup parent) {
            /**
             * 即使convertView缓存了一些布局,但是在重构时,根本不知道怎么样去让convertView返回你所需要的布局,这时你需
             * 要让adapter知道我当前有哪些布局,我重构Item时的布局选取规则,好让convertView能返回你需要的布局。
             * 需要重写以下两个函数
             * @Override
             * public int getItemViewType(int position) {}这个函数获取在getView中创建的视图的类型
             * @Override
             * public int getViewTypeCount() {}返回在getView中创建视图类型的数量
             * 至于这两个方法的详细用处,自己看api即可
             */
            int type = getItemViewType(position);
            switch (type) {
                case TYPE_1:
                    convertView = LayoutInflater.from(CityActivity.this).inflate(R.layout.letter, null);
                    AutoUtils.autoSize(convertView);
                    TextView tv = (TextView) convertView.findViewById(R.id.letterTextView);
                    tv.setText((String) cityToLetter.get(position));
                    break;
                case TYPE_2:
                    convertView = LayoutInflater.from(CityActivity.this).inflate(R.layout.city, null);
                    AutoUtils.autoSize(convertView);
                    TextView tv2 = (TextView) convertView.findViewById(R.id.cityTextView);
                    tv2.setText(((City) cityToLetter.get(position)).getName());
                    convertView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent();

                            setResult(200, intent);
                            finish();
                        }
                    });

                    break;
                default:
                    break;

            }
            return convertView;
        }

    }

    public void ClickView(View view) {
        switch (view.getId()) {
            case R.id.iv_left:
                finish();
                break;
            case R.id.search_box:
                //展示不显示
                search_box = (LinearLayout) findViewById(R.id.search_box);
                search_box.setVisibility(View.GONE);
                // 显示搜索框
                search_box_true = (LinearLayout) findViewById(R.id.search_box_true);
                search_box_true.setVisibility(View.VISIBLE);
                break;
            //取消
            case R.id.cancel:
                search_box.setVisibility(View.VISIBLE);
                search_box_true.setVisibility(View.GONE);
                break;
        }
    }


    class ViewHolder {
        TextView letterListTextView;

        public ViewHolder(View convertView) {
            letterListTextView = (TextView) convertView.findViewById(R.id.letterListTextView);
        }
    }
}
网上订餐不仅得到了用户们的亲睐,更是餐馆们创收的绝佳选择。餐饮企业普遍面临竞争压力加剧、人力成本、租金成本上涨等问题,而网上订餐平台正好解决这些餐饮企业的烦恼。   相关数据显示预计到2015年中国餐饮O2O市场规模将达到1200亿元左右,如此巨大的市场,自然引得各家订餐网站疯狂抢夺。抢夺方式最明显的就是圈地扩张。网站订餐是一个不可缺少的市场,其市场会越来越大,如何做一家网站订餐系统,其程序是比不可少。经过长时间的测试开发(eatcms)可以帮您打造本地商业门户,抢占手机市场等。 功能介绍 餐厅展示 展示餐厅的基本信息,图片信息,菜谱,以及地图显示商家位置等。 网上下单 用户通过系统选择商家并挑选菜品提交订单。 定制餐厅 可把附近的餐厅添加到首页。 会员中心 会员注册后有独立的会员中心,管理个人资料,订单信息,地址信息。 餐厅管理 商家有独立的管理平台,可以自主设置营业时间,更新菜单,更新资料,查收订单更新订单状态,真正实现完全自主管理。 订单管理 系统订单管理,即时查看网上订单,对订单进行相应的分发,实时更新状态. 会员管理 对网站会员进行管理,资料导出,更新资料,查看消费情况积分情况。 高级功能 财务统计 对系统营业额按照不同的条件进行查询统计,可以查看餐馆营业额,时间段内营业额,今日营业额等各项数据指标。 短信通知 有订单自动短信提醒到对应的餐厅。订单通过短信网关下发给商家,发送送餐信息给用户,信息流通更加顺畅 地图搜索 集成google地图进行商家**与搜索,用户只需**自己的位置就可以看到附近可以配送的商家。 运费计算 系统可以设置是否增加运费(高级定制功能:根据商家地址以及用户的配送地址动态计算最短路径并按照计费标准进行计算)。 界面整体定制 可根据客户的需求以及客户自身的品牌形象**进行全新的界面设计,整体风格的调整,以符合客户的品牌形象。 演示地址http://yanshi.eatcms.com/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值