最近时间实在匆忙,博客的代码基本没有解释。
介绍ExpandableListView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ExpandableListView android:id="@+id/demo_expandable_list_view" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ExpandableListView> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/tv_group" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center_vertical" android:paddingLeft="50dp"> <TextView android:id="@+id/tv_child" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
我们首先使用SimpleExpandableListAdapte来为其填充数据
package com.ouc.wkp.ui1; import android.app.Activity; import android.os.Bundle; import android.widget.ExpandableListView; import android.widget.SimpleExpandableListAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by wkp on 2016/8/24. */ public class JustLook6 extends Activity { ExpandableListView expandableListView; String[] groupStringArr = {"腾讯", "百度", "阿里"}; String[][] childStringArrs = { {"QQ", "微信", "QQ浏览器"}, {"百度搜索", "百度地图", "百度外卖"}, {"淘宝", "支付宝", "天猫商城"}}; List<Map<String, ?>> groupData=new ArrayList<>(); List<List<Map<String,?>>> childData=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expandable_list_view_index); expandableListView = (ExpandableListView) findViewById(R.id.demo_expandable_list_view); for (int i = 0; i < groupStringArr.length; i++) { Map<String, String> map = new HashMap<>(); map.put("groupName", groupStringArr[i]); groupData.add(map); List<Map<String,?>> itemList=new ArrayList<>(); for(int j=0;j<childStringArrs[i].length;j++){ Map<String,String> map0=new HashMap<>(); map0.put("itemName",childStringArrs[i][j]); itemList.add(map0); } childData.add(itemList); } SimpleExpandableListAdapter simpleExpandableListAdapter = new SimpleExpandableListAdapter(this, groupData, R.layout.item_group, new String[]{"groupName"}, new int[]{R.id.tv_group}, childData,R.layout.item_child,new String[]{"itemName"},new int[]{R.id.tv_child}); expandableListView.setAdapter(simpleExpandableListAdapter); } }
SimpleExpandableListAdapter simpleExpandableListAdapter = new SimpleExpandableListAdapter(this,
groupData, R.layout.item_group, new String[]{"groupName"}, new int[]{R.id.tv_group},
childData,R.layout.item_child,new String[]{"itemName"},new int[]{R.id.tv_child});
这个函数比较吓人,有9个参数,但是我们可以拆分成1+4+4的形式,其中的后面两组4个参数和SimpleAdapter类似。
依次为数据源,布局文件,“从哪里来(from)”,“对应到哪里去(to)”
然后我们可以使用实现BaseExpandableListAdapter类来填充数据
package com.ouc.wkp.ui1; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; /** * Created by wkp on 2016/8/24. */ public class JustLook7 extends Activity { private ExpandableListView expandableListView; private MyDemoBaseExpandableListAdapter adapter; String[] groupStringArr = {"腾讯", "百度", "阿里"}; String[][] childStringArrs = { {"QQ", "微信", "QQ浏览器"}, {"百度搜索", "百度地图", "百度外卖"}, {"淘宝", "支付宝", "天猫商城"}}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expandable_list_view_index); expandableListView = (ExpandableListView) findViewById(R.id.demo_expandable_list_view); adapter = new MyDemoBaseExpandableListAdapter(); expandableListView.setAdapter(adapter); } class MyDemoBaseExpandableListAdapter extends BaseExpandableListAdapter { @Override public int getGroupCount() { return groupStringArr.length; } @Override public int getChildrenCount(int i) { return childStringArrs[i].length; } @Override public Object getGroup(int i) { return groupStringArr[i]; } @Override public Object getChild(int i, int i1) { return childStringArrs[i][i1]; } @Override public long getGroupId(int i) { return i * 100; } @Override public long getChildId(int i, int i1) { return i * 100 + i1; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_group, null); TextView textView = (TextView) view.findViewById(R.id.tv_group); Object data = getGroup(i); textView.setText((String) data); if (i % 2 == 1) { textView.setTextColor(Color.RED); } else { textView.setTextColor(Color.GREEN); } return view; } @Override public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_child,null); TextView textView=(TextView)view.findViewById(R.id.tv_child); Object childData=getChild(i,i1); textView.setText((String)childData); if(i1>1){ textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,30); }else{ textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,20); } return view; } @Override public boolean isChildSelectable(int i, int i1) { return false; } } }
运行效果