머리말
필요성이 목록을 포함 할 때 목록 항목을 달성하기 위해 필요, 우리는 ExpandableListView를 선택할 수 있습니다. 사실,이 여전히 세트의 ListView를보기 원래 디자인입니다.인가 ListView에에게 그것의 2 층을 증가 할 수 있습니다.이 어댑터와 어댑터의 ListView의 매우 쓰기가 그래서 마찬가지로, 보기 항목 멀티플렉싱 메커니즘이 아닌 일반적인 문제가 될 것이라고 메모리를 줄이고 성능을 향상, 항목보기 재사용을 사용하여 구현 작성하려면 시간이 필요한이 시점에주의하시기 바랍니다.
간단한 데모
먼저 간단한 데모에 오래된 규칙은 가장 기본적인 사용 사례를 이해합니다. 주의! 데모는 실제 프로젝트를 사용하지 마십시오 어댑터에있는보기 다중 메커니즘을 작성할 수 없습니다. 데모은 당신이 신속하게 ExpandableListView 알고 이해하는 데 도움이
렌더링
XML을의 활동
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <ExpandableListView android:id="@+id/expandablelistview" android:layout_width="match_parent" android:layout_height="match_parent"> </ExpandableListView> </LinearLayout>
一级Item和二级Item用的xml布局
偷懒,我让一级和二级都使用一个布局
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="45dp" android:text="内容" android:textSize="15sp" android:textColor="@color/fontBlack3" android:gravity="center" android:background="@color/colorWhite"> </TextView>
编写适配器
import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; import java.util.List; public class DemoAdapter extends BaseExpandableListAdapter { List<String> mGroupList;//一级List List<List<String>> mChildList;//二级List 注意!这里是List里面套了一个List<String>,实际项目你可以写一个pojo类来管理2层数据 public DemoAdapter(List<String> groupList, List<List<String>> childList){ mGroupList = groupList; mChildList = childList; } @Override public int getGroupCount() {//返回第一级List长度 return mGroupList.size(); } @Override public int getChildrenCount(int groupPosition) {//返回指定groupPosition的第二级List长度 return mChildList.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) {//返回一级List里的内容 return mGroupList.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) {//返回二级List的内容 return mChildList.get(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) {//返回一级View的id 保证id唯一 return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) {//返回二级View的id 保证id唯一 return groupPosition + childPosition; } /** * 指示在对基础数据进行更改时子ID和组ID是否稳定 * @return */ @Override public boolean hasStableIds() { return true; } /** * 返回一级父View */ @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.text_item, parent,false); ((TextView)convertView).setText((String)getGroup(groupPosition)); return convertView; } /** * 返回二级子View */ @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.text_item, parent,false); ((TextView)convertView).setText((String)getChild(groupPosition,childPosition)); return convertView; } /** * 指定位置的子项是否可选 */ @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
Activity里的代码
mExpandableListView = findViewById(R.id.expandablelistview); List<String> groupList = new ArrayList<>(); groupList.add("一"); groupList.add("二"); groupList.add("三"); List<List<String>> childList = new ArrayList<>(); List<String> childList1 = new ArrayList<>(); childList1.add("1"); childList1.add("1"); childList1.add("1"); List<String> childList2 = new ArrayList<>(); childList2.add("2"); childList2.add("2"); childList2.add("2"); List<String> childList3 = new ArrayList<>(); childList3.add("3"); childList3.add("3"); childList3.add("3"); childList.add(childList1); childList.add(childList2); childList.add(childList3); DemoAdapter demoAdapter = new DemoAdapter(groupList, childList); mExpandableListView.setAdapter(demoAdapter); mExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {//一级点击监听 @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { //如果你处理了并且消费了点击返回true,这是一个基本的防止onTouch事件向下或者向上传递的返回机制 return false; } }); mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {//二级点击监听 @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { //如果你处理了并且消费了点击返回true return false; } });
其他Xml属性
android:dividerHeight="20dp" 设置边距高度,注意设置这个边距包括了一级和二级
android:divider="@color/colorRed1" 设置一级边距的背景色
end