public class ExpandableListActivity extends AppCompatActivity { private ExpandableListView expandView; private List<String> group_list; private List<String> item_lt; private List<List<String>> item_list; private List<List<Integer>> item_list2; private List<List<Integer>> gr_list2; private MyExpandableListViewAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_expandable_list); //设置分类 group_list = new ArrayList<String>(); group_list.add("我的好友"); group_list.add("我的家人"); group_list.add("兄弟姐妹"); group_list.add("我的同学"); //设置每一类中的项 item_lt = new ArrayList<String>(); item_lt.add("张三丰"); item_lt.add("董存瑞"); item_lt.add("李大钊"); //将子项数据封装到List中 item_list = new ArrayList<List<String>>(); item_list.add(item_lt); item_list.add(item_lt); item_list.add(item_lt); item_list.add(item_lt); //每个子项添加图标 List<Integer> tmp_list = new ArrayList<Integer>(); tmp_list.add(R.drawable.ic_launcher); tmp_list.add(R.drawable.ic_launcher); tmp_list.add(R.drawable.ic_launcher); tmp_list.add(R.drawable.ic_launcher); item_list2 = new ArrayList<List<Integer>>(); item_list2.add(tmp_list); item_list2.add(tmp_list); item_list2.add(tmp_list); item_list2.add(tmp_list); //每个分类添加图标 List<Integer> gr_list = new ArrayList<Integer>(); gr_list.add(R.drawable.haier_ic_arrow_right); gr_list.add(R.drawable.haier_ic_arrow_right); gr_list.add(R.drawable.haier_ic_arrow_right); gr_list.add(R.drawable.haier_ic_arrow_right); gr_list2 = new ArrayList<List<Integer>>(); gr_list2.add(gr_list); gr_list2.add(gr_list); gr_list2.add(gr_list); gr_list2.add(gr_list); expandView = (ExpandableListView)findViewById(R.id.expandList); expandView.setGroupIndicator(null); //监听组点击 expandView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { //如果组别中的子项为空 if (item_list.get(groupPosition).isEmpty()) { return true; } return false; } }); //监听每个分组里子控件的点击事件 expandView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(ExpandableListActivity.this,"group="+groupPosition+",child="+childPosition+","+ item_list.get(groupPosition).get(childPosition),Toast.LENGTH_SHORT).show(); return false; } }); adapter = new MyExpandableListViewAdapter(this); expandView.setAdapter(adapter); } class MyExpandableListViewAdapter extends BaseExpandableListAdapter{ private Context context; public MyExpandableListViewAdapter(Context context){ this.context = context; } //获取组的个数 @Override public int getGroupCount() { return group_list.size(); } //获取组中子元素的个数 @Override public int getChildrenCount(int groupPosition) { return item_list.get(groupPosition).size(); } //获取指定组中的数据 @Override public Object getGroup(int groupPosition) { return group_list.get(groupPosition); } //获取指定组中指定子元素的数据 @Override public Object getChild(int groupPosition, int childPosition) { return item_list.get(groupPosition).get(childPosition); } //获取指定组的ID,这个组ID必须是唯一的 @Override public long getGroupId(int groupPosition) { return groupPosition; } //获取指定组中的指定元素ID @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } //组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们 @Override public boolean hasStableIds() { return true; } //获取显示指定组的视图对象 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupHolder groupHolder = null; if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.groups,null); groupHolder = new GroupHolder(); groupHolder.txt = (TextView)convertView.findViewById(R.id.txt); groupHolder.img = (ImageView)convertView.findViewById(R.id.img); convertView.setTag(groupHolder); }else { groupHolder = (GroupHolder)convertView.getTag(); } if(!isExpanded){ groupHolder.img.setBackgroundResource(R.drawable.haier_ic_arrow_right); }else{ groupHolder.img.setBackgroundResource(R.drawable.haier_ic_arrow_down); } groupHolder.txt.setText(group_list.get(groupPosition)); return convertView; } //获取一个视图对象,显示指定组中的指定子元素数据 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ItemHolder itemHolder = null; if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.childs,null); itemHolder = new ItemHolder(); itemHolder.txt = (TextView)convertView.findViewById(R.id.txt); itemHolder.img = (ImageView)convertView.findViewById(R.id.img); convertView.setTag(itemHolder); }else{ itemHolder = (ItemHolder)convertView.getTag(); } itemHolder.txt.setText(item_list.get(groupPosition).get(childPosition)); itemHolder.img.setBackgroundResource(item_list2.get(groupPosition).get(childPosition)); return convertView; } //是否选定指定位置上的子元素 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } class GroupHolder{ public TextView txt; public ImageView img; } class ItemHolder{ public ImageView img; public TextView txt; } }
05-14