仿饿了么地图

来源:互联网 发布:d3.js和echarts 对比 编辑:程序博客网 时间:2024/04/29 03:36
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);        }    }}
原创粉丝点击