Android ExpandableListView自定義二級列表

實現(xiàn)功能:自定義列表樣式(一級列表及二級列表子項分別設置不同圖標锁施;左側(cè)時間線隨列表展開而延伸,最后一項時間線隱藏)
效果圖:


image.png

布局分析:
上方日期控件省略(用的自帶的日期控件耘柱,希望推薦一款美觀實用的辐烂,多謝)淆衷;
列表:紅色框為一級列表(包括頂部是查詢時間+左邊線條+列表標題),黃色框為二級列表(左邊線條+三個子項)


image.png

代碼:
PageHistoryActivity.java

package com.andbase.patrol.gtDemo.activity.pages.newPages;

import android.app.DatePickerDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.ExpandableListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.ab.activity.AbActivity;
import com.andbase.R;
import com.andbase.global.MyApplication;
import com.andbase.patrol.gtDemo.adapter.pagesAdapter.newPagesAdapter.PageHistoryAdapter;
import com.andbase.patrol.gtDemo.model.ElGroupListDemo;
import com.andbase.patrol.gtDemo.util.CustomDatePicker;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;

/**
 * author:lmx
 * date:2018/3/10
 * description:歷史任務--日期控件忱反、折疊列表
 */
//public class PageHistoryActivity extends AbActivity  implements View.OnClickListener {
public class PageHistoryActivity extends AbActivity{

    private MyApplication application;
    //日期控件
    private RelativeLayout selectDateStart,selectDateEnd;
    private TextView currentDateStart,currentDateEnd;
    private CustomDatePicker customDatePicker1,customDatePicker2;
    //折疊列表
    private ExpandableListView mExpandableListView = null;
    // 列表數(shù)據(jù)
    private List<String> mGroupNameList = null;
    private List<String> mGroupTimeList = null;
    private List<List<String>> mItemNameList = null;
    // 適配器
    private PageHistoryAdapter mAdapter = null;

//    //demo 折疊列表一級列表不同布局
    private PageHistoryActivity context;
//    private ExpandableListView mExpandableListView;
//    private List<ElGroupListDemo> mGroupNameList = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setAbContentView(R.layout.newpages_activity_history_demo);
        application = (MyApplication)abApplication;

        //加載不同布局
        this.mExpandableListView = (ExpandableListView) findViewById(R.id.elHistoryList);
        context = this;


        //開始日期
        selectDateStart = (RelativeLayout) findViewById(R.id.rlSelectDateStart);
//        selectDateStart.setOnClickListener(this);
        currentDateStart = (TextView) findViewById(R.id.tvCurrentDateStart);
        //結(jié)束日期
        selectDateEnd = (RelativeLayout) findViewById(R.id.rlSelectDateEnd);
//        selectDateEnd.setOnClickListener(this);
        currentDateEnd = (TextView) findViewById(R.id.tvCurrentDateEnd);

        //日期選擇
//        initDatePicker();


        /**
         * new 自帶控件
         */
        currentDateStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DatePickerDialog(PageHistoryActivity.this,new DatePickerDialog.OnDateSetListener(){
                    @Override
                    public void  onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){

                        String theDate = String.format("%d-%d-%d",year,monthOfYear+1,dayOfMonth);
                        System.out.println(theDate);
                        currentDateStart.setText(theDate);
                    }
                },2018,1,1).show();//月份從零開始泛释,故默認日期月份較實際月份+1
            }
        });

        currentDateEnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DatePickerDialog(PageHistoryActivity.this,new DatePickerDialog.OnDateSetListener(){
                    @Override
                    public void  onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){

                        String theDate = String.format("%d-%d-%d",year,monthOfYear+1,dayOfMonth);
                        System.out.println(theDate);
                        currentDateEnd.setText(theDate);
                    }
                },2018,1,1).show();//月份從零開始,故默認日期月份較實際月份+1
            }
        });


        //獲取實例-折疊列表
        mExpandableListView = (ExpandableListView) findViewById(R.id.elHistoryList);
        mExpandableListView.setGroupIndicator(null);
        // 初始化數(shù)據(jù)
        initData();

//        // 為ExpandableListView設置Adapter
//        mAdapter = new PageHistoryAdapter(this, mGroupNameList, mGroupTimeList, mItemNameList);
//        mExpandableListView.setAdapter(mAdapter);

        // 監(jiān)聽組點擊
        mExpandableListView.setSelector(new ColorDrawable(Color.TRANSPARENT));//去除點擊后出現(xiàn)的黃色背景
        mExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                                        int groupPosition, long id) {

                mExpandableListView.setSelector(new ColorDrawable(Color.TRANSPARENT));
                if (mGroupNameList.get(groupPosition).isEmpty()) {
                    return true;
                }
                return false;
            }
        });

        // 監(jiān)聽每個分組里子控件的點擊事件
        mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
                                        int childPosition, long id) {

                mExpandableListView.setSelector(new ColorDrawable(Color.TRANSPARENT));
                Toast.makeText(PageHistoryActivity.this,
                        mAdapter.getGroup(groupPosition) + ":"
                                +  mAdapter.getChild(groupPosition, childPosition) ,
                        Toast.LENGTH_SHORT).show();

                return false;

            }
        });


    }

    /**
     * 日期選擇
     */
    private void initDatePicker() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CHINA);
        String now = sdf.format(new Date());
        currentDateStart.setText(now.split(" ")[0]);//顯示當前日期
        currentDateEnd.setText(now);//顯示當前日期温算、時分

//        currentDateStart.setText("請選擇開始日期");
//        currentDateEnd.setText("請選擇結(jié)束日期");

        customDatePicker1 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
            @Override
            public void handle(String time) { // 回調(diào)接口怜校,獲得選中的時間
                currentDateStart.setText(time.split(" ")[0]);
            }
        }, "2010-01-01 00:00", now); // 初始化日期格式請用:yyyy-MM-dd HH:mm,否則不能正常運行
        customDatePicker1.showSpecificTime(false); // 不顯示時和分
        customDatePicker1.setIsLoop(true); // 允許循環(huán)滾動

        customDatePicker2 = new CustomDatePicker(this, new CustomDatePicker.ResultHandler() {
            @Override
            public void handle(String time) { // 回調(diào)接口米者,獲得選中的時間
                currentDateEnd.setText(time.split(" ")[0]);
            }
        }, "2010-01-01 00:00", now); // 初始化日期格式請用:yyyy-MM-dd HH:mm韭畸,否則不能正常運行
        customDatePicker2.showSpecificTime(false); // 不顯示時和分
        customDatePicker2.setIsLoop(true); // 允許循環(huán)滾動
    }

    /**
     * 折疊列表
     */
    //初始化數(shù)據(jù)
    private void initData(){

        //查詢時間
        mGroupTimeList = new ArrayList<String>();
        mGroupTimeList.add("2018-03-12");
        mGroupTimeList.add("2018-03-13");
        mGroupTimeList.add("2018-03-14");
        mGroupTimeList.add("");

        // 組名
        mGroupNameList = new ArrayList<String>();
        mGroupNameList.add("外操巡檢線路1");
        mGroupNameList.add("工藝巡檢線路1");
        mGroupNameList.add("工藝巡檢線路2");
        mGroupNameList.add("外操巡檢線路2");

        mItemNameList = new  ArrayList<List<String>>();
        // 外操巡檢線路1
        List<String> itemList = new ArrayList<String>();
        itemList.add("區(qū)域:區(qū)域一");
        itemList.add("類別:A類");
        itemList.add("等級:一級");
        mItemNameList.add(itemList);
        // 工藝巡檢線路1
        itemList = new ArrayList<String>();
        itemList.add("區(qū)域:區(qū)域二");
        itemList.add("類別:A類");
        itemList.add("等級:一級");
        mItemNameList.add(itemList);
        // 工藝巡檢線路2
        itemList = new ArrayList<String>();
        itemList.add("區(qū)域:區(qū)域三");
        itemList.add("類別:A類");
        itemList.add("等級:一級");
        mItemNameList.add(itemList);
        // 外操巡檢線路2
        itemList = new ArrayList<String>();
        itemList.add("區(qū)域:區(qū)域四");
        itemList.add("類別:A類");
        itemList.add("等級:一級");
        mItemNameList.add(itemList);

       // 為ExpandableListView設置Adapter
        ExpandableListView mExpandableListView = (ExpandableListView) findViewById(R.id.elHistoryList);
        mAdapter = new PageHistoryAdapter(context, mGroupNameList, mGroupTimeList, mItemNameList);
        mExpandableListView.setAdapter(mAdapter);
    }
}

newpages_activity_history_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:background="@color/gray_white">

    <!-- 日期選擇 -->
    <LinearLayout
        app:layout_heightPercent="6%"
        app:layout_widthPercent="100%"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <TextView
            android:orientation="horizontal"
            android:layout_width="80dip"
            android:layout_height="match_parent"
            android:layout_marginLeft="15dp"
            android:background="@null"
            android:gravity="fill_vertical"
            android:text="日期選擇"
            android:textColor="@color/title_text_color"
            android:textSize="@dimen/table_body" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="right">

            <TextView
                android:id="@+id/tvHistorySearch"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginRight="15dip"
                android:gravity="fill_vertical"
                android:text="查詢"
                android:textColor="@color/details_text_color"
                android:textSize="@dimen/table_body" />

        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="wrap_content"
        app:layout_heightPercent="0.15%"
        app:layout_marginTopPercent="6%"
        android:background="@color/bg4"
        />

    <!-- 選擇開始日期 -->
    <RelativeLayout
        android:id="@+id/rlSelectDateStart"
        app:layout_heightPercent="6%"
        app:layout_widthPercent="100%"
        app:layout_marginTopPercent="6.15%"
        android:background="@color/white"
        android:gravity="center_vertical">

        <ImageView
            android:layout_width="20dip"
            android:layout_height="20dip"
            android:layout_marginTop="10dip"
            android:layout_marginLeft="15dip"
            android:background="@drawable/bdate"
            />

        <TextView
            android:id="@+id/tvCurrentDateStart"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="30dip"
            android:background="@null"
            android:gravity="center"
            android:paddingEnd="15dp"
            android:paddingStart="15dp"
            android:textColor="@color/bg4"
            android:textSize="@dimen/table_body"
            android:text="請選擇開始日期"
            />

        <LinearLayout
            android:id="@+id/right1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@null"
            android:gravity="right">

            <ImageView
                android:layout_width="8dip"
                android:layout_height="12dip"
                android:layout_marginTop="12dip"
                android:layout_marginRight="15dip"
                android:gravity="fill_vertical"
                android:background="@drawable/menu_img"
                />

        </LinearLayout>

    </RelativeLayout>

    <View
        android:layout_width="wrap_content"
        app:layout_heightPercent="0.15%"
        app:layout_marginTopPercent="12.15%"
        android:layout_marginLeft="44dip"
        android:background="@color/bg4"
        />

    <!-- 選擇結(jié)束日期 -->
    <RelativeLayout
        android:id="@+id/rlSelectDateEnd"
        app:layout_heightPercent="6%"
        app:layout_widthPercent="100%"
        app:layout_marginTopPercent="12.3%"
        android:background="@color/white"
        android:gravity="center_vertical">

        <ImageView
            android:layout_width="20dip"
            android:layout_height="20dip"
            android:layout_marginTop="10dip"
            android:layout_marginLeft="15dip"
            android:background="@drawable/edate"
            />

        <TextView
            android:id="@+id/tvCurrentDateEnd"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="30dip"
            android:background="@null"
            android:gravity="center"
            android:paddingEnd="15dp"
            android:paddingStart="15dp"
            android:textColor="@color/bg4"
            android:textSize="@dimen/table_body"
            android:text="請選擇結(jié)束日期"/>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@null"
            android:gravity="right">

            <ImageView
                android:layout_width="8dip"
                android:layout_height="12dip"
                android:layout_marginTop="14dip"
                android:layout_marginRight="15dip"
                android:gravity="fill_vertical"
                android:background="@drawable/menu_img"
                />

        </LinearLayout>

    </RelativeLayout>

    <View
        android:layout_width="wrap_content"
        app:layout_heightPercent="0.15%"
        app:layout_marginTopPercent="18.3%"
        android:background="@color/bg4"
        />

    <!-- 折疊列表 -->
    <ExpandableListView
        android:id="@+id/elHistoryList"
        app:layout_widthPercent="99%"
        app:layout_heightPercent="80%"
        android:background="@color/transparent"
        app:layout_marginTopPercent="19.5%"
        app:layout_marginLeftPercent="0.6%"
        app:layout_marginRightPercent="0.4%" />

</android.support.percent.PercentFrameLayout>

PageHistoryAdapter.java

package com.andbase.patrol.gtDemo.adapter.pagesAdapter.newPagesAdapter;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.andbase.R;
import com.andbase.patrol.gtDemo.activity.pages.newPages.PageHistoryActivity;

import java.util.List;

/**
 * author:lmx
 * date:2018/3/10
 * description:折疊列表
 */

public class PageHistoryAdapter extends BaseExpandableListAdapter {
    private PageHistoryActivity mContext = null;
    private List<String> mGroupTimeList = null;
    private List<String> mGroupList = null;//線路名
    private List<List<String>> mItemList = null;
    //線路不同布局
    private final int Group_TYPE = 2;
    private final int Group_1 = 0;
    private final int Group_2 = 1;
    //子項不同布局
    private final int VIEW_TYPE = 3;
    private final int TYPE_1 = 0;
    private final int TYPE_2 = 1;
    private final int TYPE_3 = 2;

    public PageHistoryAdapter(PageHistoryActivity context, List<String> groupList, List<String> groupTimeList,
                                       List<List<String>> itemList) {
        this.mContext = context;
        this.mGroupList = groupList;
        this.mGroupTimeList = groupTimeList;
        this.mItemList = itemList;
    }

    /**
     * 獲取組的個數(shù)
     *
     * @return
     * @see android.widget.ExpandableListAdapter#getGroupCount()
     */
    @Override
    public int getGroupCount() {
        return mGroupList.size();
    }

    /**
     * 獲取指定組中的子元素個數(shù)
     *
     * @param groupPosition
     * @return
     * @see android.widget.ExpandableListAdapter#getChildrenCount(int)
     */
    @Override
    public int getChildrenCount(int groupPosition) {
        return mItemList.get(groupPosition).size();
    }

    /**
     * 獲取指定組中的數(shù)據(jù)
     *
     * @param groupPosition
     * @return
     * @see android.widget.ExpandableListAdapter#getGroup(int)
     */
    @Override
    public String getGroup(int groupPosition) {
        return mGroupList.get(groupPosition);
    }

    /**
     * 獲取指定組中的指定子元素數(shù)據(jù)。
     *
     * @param groupPosition
     * @param childPosition
     * @return
     * @see android.widget.ExpandableListAdapter#getChild(int, int)
     */
    @Override
    public String getChild(int groupPosition, int childPosition) {
        return mItemList.get(groupPosition).get(childPosition);
    }

    /**
     * 獲取指定組的ID蔓搞,這個組ID必須是唯一的
     *
     * @param groupPosition
     * @return
     * @see android.widget.ExpandableListAdapter#getGroupId(int)
     */
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    /**
     * 獲取指定組中的指定子元素ID
     *
     * @param groupPosition
     * @param childPosition
     * @return
     * @see android.widget.ExpandableListAdapter#getChildId(int, int)
     */
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    /**
     * 線路的兩種布局
     *
     * @param groupPosition
     * @return
     */
    public int getGroupViewType(int groupPosition) {
        int g = groupPosition;
        if (g % 2 == 0) { //偶數(shù)
            return Group_1;
        }
//        else if (g == 1) {
//            return Group_2;
//        }
        else {
            return Group_2;
        }
    }

    /**
     * 子項的三種布局
     *
     * @param childPosition
     * @return
     */
    public int getItemViewType(int childPosition) {
        int p = childPosition;
        if (p == 0) {
            return TYPE_1;
        }
        else if (p == 1) {
            return TYPE_2;
        } else if (p == 2) {
            return TYPE_3;
        }
        else {
            return TYPE_1;
        }
    }

    /**
     * 獲取顯示指定組的視圖對象
     *
     * @param groupPosition 組位置
     * @param isExpanded    該組是展開狀態(tài)還是伸縮狀態(tài)
     * @param convertView   重用已有的視圖對象
     * @param parent        返回的視圖對象始終依附于的視圖組
     * @return
     * @see android.widget.ExpandableListAdapter#getGroupView(int, boolean, android.view.View,
     * android.view.ViewGroup)
     */
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                             ViewGroup parent) {

        GroupHolder groupHolder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.newpages_history_expandlist_group_item_demo, null);
            groupHolder = new GroupHolder();
            //獲取時間顯示
            groupHolder.rlGroupBox = (RelativeLayout) convertView.findViewById(R.id.rlGroupBox);
            groupHolder.ivGroupTimeImg = (ImageView) convertView.findViewById(R.id.ivGroupTimeImg);
            groupHolder.tvGroupTime = (TextView) convertView.findViewById(R.id.tvGroupTime);
            //標題行
            groupHolder.llListHeader = (LinearLayout) convertView.findViewById(R.id.llListHeader);
            groupHolder.tvGroupName = (TextView) convertView.findViewById(R.id.tvGroupName);
            groupHolder.ivGroupTilleImg = (ImageView) convertView.findViewById(R.id.ivGroupTilleImg);
            groupHolder.ivElImg = (ImageView) convertView.findViewById(R.id.ivElImg);
            groupHolder.ivLeftGroupLine = (ImageView) convertView.findViewById(R.id.ivLeftGroupLine);
            convertView.setTag(groupHolder);
        } else {
            groupHolder = (GroupHolder) convertView.getTag();
        }

        if (isExpanded) {//展開
            groupHolder.ivElImg.setImageResource(R.drawable.history_expand_top_open);
            //展開直角
            groupHolder.llListHeader.setBackgroundResource(R.drawable.history_ellist_top_bg_demo);
        } else {//折疊
            groupHolder.ivElImg.setImageResource(R.drawable.history_expand_top_close);
            //折疊圓角
            groupHolder.llListHeader.setBackgroundResource(R.drawable.history_ellist_top_bg_close_demo);
        }
        //顯示線路名
        groupHolder.tvGroupName.setText(mGroupList.get(groupPosition));
        //顯示時間:時間若為空胰丁,則顯示區(qū)域隱藏
        if(!"".equals(mGroupTimeList.get(groupPosition))){
            groupHolder.tvGroupTime.setText(mGroupTimeList.get(groupPosition));
        }else{
            groupHolder.rlGroupBox.setVisibility(View.GONE);
        }
        //標題圖片:偶數(shù)行顯示外操圖片,奇數(shù)行顯示工藝圖片
        if(groupPosition % 2 == 0){
            groupHolder.ivGroupTilleImg.setImageResource(R.drawable.history_expand_top_wc);
        }else {
            groupHolder.ivGroupTilleImg.setImageResource(R.drawable.history_expand_top_gy);
        }
        //最后一項左側(cè)線隱藏
        if("".equals(mGroupTimeList.get(groupPosition)) || "2018-03-14".equals(mGroupTimeList.get(groupPosition))){
            groupHolder.ivLeftGroupLine.setBackgroundColor(Color.TRANSPARENT);

        }else{
            groupHolder.ivLeftGroupLine.setBackgroundColor(Color.parseColor("#33cc99"));
        }

        return convertView;
    }

    /**
     * 獲取一個視圖對象喂分,顯示指定組中的指定子元素數(shù)據(jù)锦庸。
     *
     * @param groupPosition 組位置
     * @param childPosition 子元素位置
     * @param isLastChild   子元素是否處于組中的最后一個
     * @param convertView   重用已有的視圖(View)對象
     * @param parent        返回的視圖(View)對象始終依附于的視圖組
     * @return
     * @see android.widget.ExpandableListAdapter#getChildView(int, int, boolean, android.view.View,
     * android.view.ViewGroup)
     */
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                             View convertView, ViewGroup parent) {

        ItemHolder itemHolder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.newpages_history_expandlist_item_area_demo, null);
            itemHolder = new ItemHolder();
            //子項
            itemHolder.llListHeader = (LinearLayout)convertView.findViewById(R.id.llListHeader);
            itemHolder.ivItemIconImg = (ImageView) convertView.findViewById(R.id.ivItemIconImg);
            itemHolder.ivLeftItemLine = (ImageView) convertView.findViewById(R.id.ivLeftItemLine);
            itemHolder.tvItemName = (TextView) convertView.findViewById(R.id.tvItemName);

            convertView.setTag(itemHolder);
        } else {
            itemHolder = (ItemHolder) convertView.getTag();
        }

        //子項數(shù)據(jù)
        itemHolder.tvItemName.setText(mItemList.get(groupPosition).get(childPosition));
        //子項圖片
        switch (childPosition){
            case 0:
                itemHolder.ivItemIconImg.setImageResource(R.drawable.history_expand_item_area);
                itemHolder.llListHeader.setBackgroundResource(R.drawable.history_ellist_content_bg_close_demo);
                break;
            case 1:
                itemHolder.ivItemIconImg.setImageResource(R.drawable.history_expand_item_sort);
                itemHolder.llListHeader.setBackgroundResource(R.drawable.history_ellist_content_bg_close_demo);
                break;
            case 2:
                itemHolder.ivItemIconImg.setImageResource(R.drawable.history_expand_item_level);
                //最后一項底部呈圓角
                itemHolder.llListHeader.setBackgroundResource(R.drawable.history_ellist_content_bg_demo);
                break;
        }
        //最后一項左側(cè)線隱藏
        if("".equals(mGroupTimeList.get(groupPosition)) || "2018-03-14".equals(mGroupTimeList.get(groupPosition))){
            itemHolder.ivLeftItemLine.setBackgroundColor(Color.TRANSPARENT);

        }else{
            itemHolder.ivLeftItemLine.setBackgroundColor(Color.parseColor("#33cc99"));
        }
      return convertView;
    }

    /**
     * 組和子元素是否持有穩(wěn)定的ID,也就是底層數(shù)據(jù)的改變不會影響到它們。
     *
     * @return
     * @see android.widget.ExpandableListAdapter#hasStableIds()
     */
    @Override
    public boolean hasStableIds() {
        return true;
    }

    /**
     * 是否選中指定位置上的子元素蒲祈。
     *
     * @param groupPosition
     * @param childPosition
     * @return
     * @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
     */
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
    //線路兩種布局
    class GroupHolder {
        public RelativeLayout rlGroupBox;//顯示時間區(qū)域
        public TextView tvGroupTime;//時間
        public ImageView ivGroupTimeImg;//時間線圖片
        public TextView tvGroupName;//線路名
        public ImageView ivElImg;//折疊標志圖片
        public ImageView ivGroupTilleImg;//標題左側(cè)圖片
        public ImageView ivLeftGroupLine;//左側(cè)線
        private LinearLayout llListHeader;//邊角
    }
    //子項布局
    class ItemHolder {
        public ImageView ivItemIconImg;//圖片
        public TextView tvItemName;//內(nèi)容
        public ImageView ivLeftItemLine;//左側(cè)線
        private LinearLayout llListHeader;//邊角
    }

}

newpages_history_expandlist_group_item_demo.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="65dp"
    android:orientation="vertical"
    android:background="@color/transparent">

    <!-- 折疊列表頭部時間 -->
    <RelativeLayout
        android:id="@+id/rlGroupBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:clickable="false">

        <ImageView
            android:id="@+id/ivGroupTimeImg"
            android:layout_width="20dip"
            android:layout_height="20dip"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dip"
            android:src="@drawable/history_expand_top_point" />

        <TextView
            android:id="@+id/tvGroupTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/group_img"
            android:layout_marginLeft="40dip"
            android:text="2018-03-10"
            android:textColor="@color/project_word_color"
            android:textSize="@dimen/history_ellist_top_title" />

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/ivLeftGroupLine"
            android:layout_width="1.2dip"
            android:layout_height="match_parent"
            android:layout_marginLeft="19.5dip"
            android:background="@color/el_list_left_line_color"
            />

        <LinearLayout
            android:id="@+id/llListHeader"
            android:layout_width="match_parent"
            android:layout_height="40dip"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="10dip"
            android:layout_marginTop="5dip"
            android:orientation="horizontal"
            android:background="@drawable/history_ellist_top_bg_close_demo"
            >

            <ImageView
                android:id="@+id/ivGroupTilleImg"
                android:layout_width="25dip"
                android:layout_height="25dip"
                android:layout_marginTop="7.5dip"
                android:layout_marginLeft="18dip"
                />
            <!--android:background="@drawable/history_expand_top_wc"-->

            <TextView
                android:id="@+id/tvGroupName"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="10dip"
                android:gravity="fill_vertical"
                android:text="外操巡檢線路1"
                android:textColor="@color/white"
                android:textSize="@dimen/history_ellist_top_list_title"
                />

            <!-- 展開折疊圖標 -->
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="right" >

                <ImageView
                    android:id="@+id/ivElImg"
                    android:layout_width="15dip"
                    android:layout_height="10dip"
                    android:layout_marginTop="15dip"
                    android:layout_marginRight="15dip" />
                <!--android:background="@drawable/history_expand_top_close"-->

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

newpages_history_expandlist_item_area_demo.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="31dp"
    android:orientation="horizontal"
    android:background="@color/transparent">

    <ImageView
        android:id="@+id/ivLeftItemLine"
        android:layout_width="1.2dip"
        android:layout_height="match_parent"
        android:layout_marginLeft="19.5dip"
        android:orientation="vertical"
        android:background="@color/el_list_left_line_color" />

    <LinearLayout
        android:id="@+id/llListHeader"
        android:layout_width="match_parent"
        android:layout_height="30dip"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="10dip"
        android:orientation="horizontal"
        android:background="@drawable/history_ellist_content_bg_close_demo">

            <ImageView
                android:id="@+id/ivItemIconImg"
                android:layout_width="18dip"
                android:layout_height="18dip"
                android:layout_marginTop="6dip"
                android:layout_marginLeft="20dip" />
        <!--android:background="@drawable/history_expand_item_area"-->

            <TextView
                android:id="@+id/tvItemName"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="10dip"
                android:gravity="fill_vertical"
                android:text="區(qū)域:區(qū)域一"
                android:textColor="@color/details_fix_text_color"
                android:textSize="@dimen/history_ellist_top_title"
                />

        </LinearLayout>

</LinearLayout>

history_ellist_top_bg_close_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 矩形的圓角弧度 -->
    <corners android:topLeftRadius="10dp"
        android:topRightRadius="10dp"
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"/>
    <!-- 矩形的填充色 -->
    <solid android:color="#33ccff" />
    <!-- 邊界線為實線 -->
    <stroke
        android:width="1dp"
        android:color="#33ccff" />
</shape>

history_ellist_top_bg_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 矩形的圓角弧度 -->
    <corners android:topLeftRadius="10dp"
        android:topRightRadius="10dp"/>
   <!-- 矩形的填充色 -->
    <solid android:color="#33ccff" />
    <!-- 邊界線為實線 -->
    <stroke
        android:width="1dp"
        android:color="#33ccff" />
</shape>

history_ellist_content_bg_close_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#FFFFFF" />

    <stroke
        android:width="0.01dip"
        android:color="#efeeee" />

    <padding
        android:bottom="1dip"
        android:left="0dip"
        android:right="0dip"
        android:top="0dip" />

</shape>

history_ellist_content_bg_demo.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#FFFFFF" />
    <stroke
        android:width="0.01dip"
        android:color="#efeeee" />
    <padding
        android:bottom="1dip"
        android:left="0dip"
        android:right="0dip"
        android:top="0dip" />
    <!-- 矩形的圓角弧度 -->
    <corners android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"/>
    <!-- 矩形的填充色 -->
    <solid android:color="#FFFFFF" />
    <!-- 邊界線為實線 -->
    <stroke
        android:width="1dp"
        android:color="#FFFFFF" />
</shape>

color.xml

<color name="el_list_left_line_color">#33cc99</color>
<color name="el_list_top_color">#33ccff</color>
image.png
image.png

完甘萧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萝嘁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扬卷,更是在濱河造成了極大的恐慌牙言,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怪得,死亡現(xiàn)場離奇詭異咱枉,居然都是意外死亡,警方通過查閱死者的電腦和手機徒恋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門蚕断,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人入挣,你說我怎么就攤上這事亿乳。” “怎么了径筏?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵葛假,是天一觀的道長。 經(jīng)常有香客問我匠璧,道長桐款,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任夷恍,我火速辦了婚禮,結(jié)果婚禮上媳维,老公的妹妹穿的比我還像新娘酿雪。我一直安慰自己,他們只是感情好侄刽,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布指黎。 她就那樣靜靜地躺著,像睡著了一般州丹。 火紅的嫁衣襯著肌膚如雪醋安。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天墓毒,我揣著相機與錄音吓揪,去河邊找鬼。 笑死所计,一個胖子當著我的面吹牛柠辞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播主胧,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼叭首,長吁一口氣:“原來是場噩夢啊……” “哼习勤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起焙格,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤图毕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眷唉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體予颤,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年厢破,在試婚紗的時候發(fā)現(xiàn)自己被綠了荣瑟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡摩泪,死狀恐怖笆焰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情见坑,我是刑警寧澤嚷掠,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站荞驴,受9級特大地震影響不皆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熊楼,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一霹娄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲫骗,春花似錦犬耻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至术吝,卻和暖如春计济,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背排苍。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工沦寂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纪岁。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓凑队,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子漩氨,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容