Android 模仿城市列表ExpandableListView
阿新 • • 發佈:2019-02-17
好久沒寫部落格了。很多東西都沒積累,現在要開始重新積累起來了。嘻嘻
最近在寫一款獲取城市列表,當點選市名稱時,將其下面的區名稱顯示出來,首先我是利用往layout中加入佈局檔案實現的。第三種是從網上看到有人用ExpandableListView實現的。第四種是自己整理的。
第一種方法跟第二種方法十分類似。第二種方法比較精簡一點兒。
第四種方法是使用ExpandableListView來實現的。比第二種方法簡單很多。並且可以實現相同的功能。public class TwoActivity extends Activity { private LinearLayout layout; private List<String> provinceList = new ArrayList<String>();// 省份列表 private List<Map<String, Object>> cityList = new ArrayList<Map<String, Object>>();// 城市列表 private final String LIST_PROVINCE = "province";// 省份 private final String LIST_CITY = "city";// 城市 private final String LIST_IS_OPEN = "isOpen";// 是否展開 private final String LIST_AREAS = "areas";// 屬於某一個市的區列表 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.two_activity); initView(); getData(); fillData(); } private void initView() { layout = (LinearLayout) findViewById(R.id.layout_two); } private void getData() { for (int i = 0; i < 10; i++) { provinceList.add("province" + i); } for (int j = 0; j < 10; j++) { Map<String, Object> map = new HashMap<String, Object>(); map.put(LIST_PROVINCE, provinceList.get(j)); map.put(LIST_CITY, "city" + j); map.put(LIST_IS_OPEN, false); List<String> itemList = new ArrayList<String>(); for (int m = 0; m < 10; m++) { itemList.add("area is " + m); } map.put(LIST_AREAS, itemList); cityList.add(map); } for (int j = 0; j < 10; j++) { Map<String, Object> map = new HashMap<String, Object>(); map.put(LIST_PROVINCE, provinceList.get(j)); map.put(LIST_CITY, "cityone" + j); map.put(LIST_IS_OPEN, false); List<String> itemList = new ArrayList<String>(); for (int m = 0; m < 10; m++) { itemList.add("area is " + m); } map.put(LIST_AREAS, itemList); cityList.add(map); } } @SuppressWarnings("unchecked") @SuppressLint("InflateParams") private void fillData() { for (int i = 0; i < provinceList.size(); i++) { View v_title = LayoutInflater.from(this).inflate( R.layout.item_province, null); TextView tv_title = (TextView) v_title .findViewById(R.id.tv_title_item); tv_title.setText(provinceList.get(i)); layout.addView(v_title); for (int j = 0; j < cityList.size(); j++) { if (provinceList.get(i).equals( cityList.get(j).get(LIST_PROVINCE))) { View v_city = LayoutInflater.from(this).inflate( R.layout.item_city, null); TextView tv_city = (TextView) v_city .findViewById(R.id.tv_city_item); tv_city.setText(cityList.get(j).get(LIST_CITY).toString()); final int position = j; tv_city.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { boolean isOpen = !(boolean) cityList.get(position) .get(LIST_IS_OPEN); Map<String, Object> newMap = new HashMap<String, Object>(); newMap = cityList.get(position); newMap.put(LIST_IS_OPEN, isOpen); layout.removeAllViews(); fillData(); } }); layout.addView(v_city); if ((boolean) cityList.get(j).get(LIST_IS_OPEN)) { List<String> list = new ArrayList<String>(); list = (List<String>) cityList.get(j).get(LIST_AREAS); for (int n = 0; n < list.size(); n++) { View v_area = LayoutInflater.from(TwoActivity.this) .inflate(R.layout.item_area, null); TextView tv_area = (TextView) v_area .findViewById(R.id.tv_area_item); tv_area.setText(list.get(n)); layout.addView(v_area); } } } } } } }
實現的功能十分簡單。就是一個城市列表。點選檢視更多。public class FourActivity extends Activity { private ExpandableListView expandableListview; private FourAdapter adapter; private List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();// 儲存資料的列表 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.four_activity); initView(); getListData(); adapter.setList(dataList); } private void initView() { expandableListview = (ExpandableListView) findViewById(R.id.elv_four); expandableListview.setGroupIndicator(null);// 設定屬性,去掉預設的箭頭 adapter = new FourAdapter(FourActivity.this); expandableListview.setAdapter(adapter); } private void getListData() { for (int i = 0; i < 10; i++) { Map<String, Object> pMap = new HashMap<String, Object>(); pMap.put(Constances.LIST_TYPE, Constances.TYPE_PROVINCE); pMap.put(Constances.LIST_NAME, "province --- " + i); dataList.add(pMap); for (int j = 0; j < 3; j++) { Map<String, Object> map = new HashMap<String, Object>(); map.put(Constances.LIST_TYPE, Constances.TYPE_CITY); map.put(Constances.LIST_NAME, "province --- " + i + "city === " + j); List<String> itemList = new ArrayList<String>(); for (int m = 0; m < 10; m++) { itemList.add("province --- " + i + "city === " + j + "area is " + m); } map.put(Constances.LIST_AREAS, itemList); dataList.add(map); } } } }
原始碼下載地址:http://download.csdn.net/detail/u011382076/8752309
直接下載就可以執行的一個工程。歡迎大家指教