仿饿了么地图
来源:互联网 发布: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); } }}
阅读全文
0 0
- 仿饿了么地图
- 仿饿了么百度地图定位
- 百度地图放饿了么我的地址定位(仿ele地图定位效果)
- 仿饿了么 +
- iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/
- 高仿<饿了么>源码
- android 仿饿了么购物车
- android 仿饿了么购物车
- 仿饿了么购物车下单效果
- 仿饿了么“谁去拿外卖”代码
- vue2.0仿饿了么webapp
- 仿饿了么加载动画
- 仿饿了么点击购物效果
- 仿饿了么下拉刷新效果
- 仿饿了么 问题集
- 仿饿了么下拉刷新
- 仿饿了么搜索页面特效
- 基于react+redux仿饿了么
- iOS 自定义多张图片选择+demo
- 数字滤波的定义和常用方法
- 打包framework
- 搭建JEESZ分布式架构2--CentOs下安装Tomcat7(环境准备)
- pybot 使用说明
- 仿饿了么地图
- 求最大公约数
- Samba服务
- ViewPager系列之ViewPager一屏显示多个子页面
- delphi Format格式化函数
- 量化模型的分类
- echo "/aaa/bbb/ccc" | sed 's/.*\///g'
- Linux安装nginx
- jstack和线程dump分析