ExpandableListView(二)

相关文章
ExpandableListActivity(一)

参考资料:
1,菜鸟教程–ExpandableListView(可折叠列表)的基本使用
2, Android小白–Android中ExpandableListView常用属性总结


效果图
在这里插入图片描述
首先是组布局和组子项布局
item_exlist_group.xml

<?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="match_parent"
    android:padding="5dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="中医院站"
        android:textSize="20sp"
        android:id="@+id/group_name"
        android:textStyle="bold"
        android:layout_marginLeft="20dp"
        android:textColor="@android:color/black"/>
</LinearLayout>

item_exlist_item.xml

<?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="match_parent"
    android:padding="5dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/car"
        android:layout_marginLeft="40dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1号"
        android:textSize="20sp"
        android:id="@+id/stationNo"
        android:layout_marginLeft="20dp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="("
        android:textSize="20sp"
        android:layout_marginLeft="20dp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="101"
        android:textSize="20sp"
        android:id="@+id/peopleNum"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="人)"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5"
        android:textSize="20sp"
        android:id="@+id/time"
        android:layout_marginLeft="40dp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="分钟到达"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="距离站台"
        android:gravity="right"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="100"
        android:id="@+id/distance"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:layout_marginRight="100dp"
        android:textSize="20sp"
        android:textColor="@android:color/black"/>
</LinearLayout>


TextView有点多,黄色的是变量

然后是activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <ExpandableListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/exlist"
        android:divider="@drawable/dotted_line"
        android:childDivider="@drawable/dotted_line"
        android:dividerHeight="5dp"
        android:layerType="software"
        ></ExpandableListView>
    <!--android:divider="@drawable/dotted_line" 组之间的分割线-->
    <!--android:childDivider="@drawable/dotted_line" 子项之间的分割线-->
    <!--android:dividerHeight="5dp" 分割线的高度,若不设置显示不出来-->
    <!--android:layerType="software"  4.0以上设备需设置,不然会变成实线-->
</LinearLayout>

界面写完了,写适配器之前先写两个类,Group和 Item ,用于数据的初始化
Group.java

public class Group {
    private String group_name;

    public Group() {
    }

    public String getGroup_name() {
        return group_name;
    }

    public void setGroup_name(String group_name) {
        this.group_name = group_name;
    }

    public Group(String group_name) {
        this.group_name = group_name;
    }
}

Item.java

public class Item {

    private String stationNo;
    private String peopleNum;
    private String time;
    private String distance ;

    public Item() {
    }

    public Item(String stationNo, String peopleNum, String time, String distance) {
        this.stationNo = stationNo;
        this.peopleNum = peopleNum;
        this.time = time;
        this.distance = distance;
    }

    public String getStationNo() {
        return stationNo;
    }

    public void setStationNo(String stationNo) {
        this.stationNo = stationNo;
    }

    public String getPeopleNum() {
        return peopleNum;
    }

    public void setPeopleNum(String peopleNum) {
        this.peopleNum = peopleNum;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getDistance() {
        return distance;
    }

    public void setDistance(String distance) {
        this.distance = distance;
    }
}

接下来就是适配器了

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter {
    private ArrayList<Group> gData;
    private ArrayList<ArrayList<Item>> iData;
    private Context mContext;

    public MyBaseExpandableListAdapter(ArrayList<Group> gData, ArrayList<ArrayList<Item>> iData, Context mContext) {
        this.gData = gData;
        this.iData = iData;
        this.mContext = mContext;
    }

    @Override
    public int getGroupCount() {
        return gData.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return iData.get(i).size();
    }

    @Override
    public Object getGroup(int i) {
        return gData.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return iData.get(i).get(i1);
    }

    @Override
    public long getGroupId(int i) {
        return i;
    }

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        ViewHolderGroup holderGroup;
        if(view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.item_exlist_group, null);
            holderGroup = new ViewHolderGroup();
            holderGroup.groupName = (TextView) view.findViewById(R.id.group_name);
            view.setTag(holderGroup);
        }else{
            holderGroup = (ViewHolderGroup) view.getTag();

        }
        holderGroup.groupName.setText(gData.get(i).getGroup_name());
        return view;
    }

    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        ViewHolderItem holderItem;
        if(view == null){
            view = LayoutInflater.from(mContext).inflate(R.layout.item_exlist_item, null);
            holderItem = new ViewHolderItem();
            holderItem.stationNo = (TextView) view.findViewById(R.id.stationNo);
            holderItem.peopleNum = (TextView) view.findViewById(R.id.peopleNum);
            holderItem.time = (TextView) view.findViewById(R.id.time);
            holderItem.distance = (TextView) view.findViewById(R.id.distance);
            view.setTag(holderItem);
        }else{
            holderItem = (ViewHolderItem) view.getTag();

        }
        holderItem.stationNo.setText(iData.get(i).get(i1).getStationNo());
        holderItem.peopleNum.setText(iData.get(i).get(i1).getPeopleNum());
        holderItem.time.setText(iData.get(i).get(i1).getTime());
        holderItem.distance .setText(iData.get(i).get(i1).getDistance());
        return view;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
    private class ViewHolderGroup{
        private TextView groupName;
    }
    private class ViewHolderItem{
        private TextView stationNo;
        private TextView peopleNum;
        private TextView time;
        private TextView distance ;
    }
}

然后MainActivity里面开始加入数据

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ExpandableListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ArrayList<Group>gData = null;
    private ArrayList<ArrayList<Item>> iData = null;
    private ArrayList<Item> IData = null;
    private Context mContext;
    private ExpandableListView exlist;
    private MyBaseExpandableListAdapter myAdapter = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = MainActivity.this;
        exlist = (ExpandableListView) findViewById(R.id.exlist);

        gData = new ArrayList<Group>();
        iData = new ArrayList<ArrayList<Item>>();
        gData.add(new Group("中医院站"));
        gData.add(new Group("联想大厦站"));


        //中医院站
        IData = new ArrayList<Item>();
        IData.add(new Item("1","101","5","100"));
        IData.add(new Item("2","101","6","1000"));
        iData.add(IData);

        //联想大厦站
        IData = new ArrayList<Item>();
        IData.add(new Item("1","101","5","300"));
        IData.add(new Item("2","101","7","1200"));
        iData.add(IData);

        myAdapter = new MyBaseExpandableListAdapter(gData, iData, mContext);
        exlist.setAdapter(myAdapter);

        //列表默认展开
        for(int i = 0; i < myAdapter.getGroupCount(); i++){

            exlist.expandGroup(i);

        }
    }
}

分割线 drawable文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="4px"
        android:color="#D4D1D1"
        android:dashGap="1dp"
        android:dashWidth="5dp"/>
</shape>

stroke属性说明



项目代码下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值