美文网首页
ExpandableListView 二级列表

ExpandableListView 二级列表

作者: 嗯哼_e683 | 来源:发表于2020-05-24 18:24 被阅读0次

先上效果图

效果图
1.定义二级列表布局
<?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"
    tools:context=".fragment.MolukFragment">

    <ExpandableListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/el"></ExpandableListView>


</LinearLayout>

2.定义要显示的数据

//group数据
        ArrayList<String> mGroupList;
        //item数据
        ArrayList<ArrayList<String>> mItemSet;

        mGroupList = new ArrayList<>();
        mGroupList.add("我的家人");
        mGroupList.add("我的朋友");
        mGroupList.add("黑名单");
        mItemSet = new ArrayList<>();
        ArrayList<String> itemList1 = new ArrayList<>();
        itemList1.add("大妹");
        itemList1.add("二妹");
        itemList1.add("三妹");
        ArrayList<String> itemList2 = new ArrayList<>();
        itemList2.add("大美");
        itemList2.add("二美");
        itemList2.add("三美");
        ArrayList<String> itemList3 = new ArrayList<>();
        itemList3.add("狗蛋");
        itemList3.add("二丫");
        mItemSet.add(itemList1);
        mItemSet.add(itemList2);
        mItemSet.add(itemList3);
        //适配器
        elAdapter = new ElAdapter(getActivity(), mGroupList, mItemSet);
        //绑定适配器
        el.setAdapter(elAdapter);

3.自定义适配器,需要继承 BaseExpandableListAdapter 抽象类,重写相关的方法

public class ElAdapter extends BaseExpandableListAdapter {
    private Context context;
    //group数据
    ArrayList<String> mGroupList;
    //item数据
    ArrayList<ArrayList<String>> mItemSet;
    //构造方法
    public ElAdapter(Context context, ArrayList<String> mGroupList, ArrayList<ArrayList<String>> mItemSet) {
        this.context = context;
        this.mGroupList = mGroupList;
        this.mItemSet = mItemSet;
    }


    //父项的个数
    @Override
    public int getGroupCount() {
        return mGroupList.size();
    }
    //某个父项的子项的个数
    @Override
    public int getChildrenCount(int groupPosition) {
        return mItemSet.get(groupPosition).size();
    }
    //获得某个父项
    @Override
    public Object getGroup(int groupPosition) {
        return mGroupList.get(groupPosition);
    }
    //获得某个子项
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return mItemSet.get(groupPosition).get(childPosition);
    }
    //父项的Id
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
    //子项的Id
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }
    //获取父项的view
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.item_group,null);
        }
        String group = mGroupList.get(groupPosition);
        TextView tvGroup = (TextView) convertView.findViewById(R.id.tv_group);
        tvGroup.setText(group);
        return convertView;

    }
    //获取子项的view
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if (convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.item_child,null);
        }
        String s = mItemSet.get(groupPosition).get(childPosition);
        TextView tvChild = (TextView)convertView.findViewById(R.id.tv_name);
        tvChild.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,s,Toast.LENGTH_SHORT).show();
            }
        });
        tvChild.setText(s);
        return convertView;

    }
    //子项是否可选中,如果要设置子项的点击事件,需要返回true
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

4.子项的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:padding="8dp">

    <ImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="40dp"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textSize="16sp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textSize="16sp" />
    </LinearLayout>

</LinearLayout>

5.父项的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <TextView
        android:id="@+id/tv_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="50dp"
        android:text="name"
        android:textSize="18sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dp"
        android:text="4/18"
        android:textSize="16sp" />

</RelativeLayout>

6.ExpandableListView的条目点击监听和条目长安监听

1.对于处理 Item 的点击事件,还是要设置监听器,常用的有这几类:

•setOnChildClickListener//单击子选项
•setOnGroupClickListener//单击组选项
•setOnGroupCollapseListener//分组合并
•setOnGroupExpandListener//分组合并
注意:
setOnChildClickListener,想要此回调有效,适配器的isChildSelectable()方法必须返回true

相关文章

网友评论

      本文标题:ExpandableListView 二级列表

      本文链接:https://www.haomeiwen.com/subject/zdvjahtx.html