天天看点

安卓学习--二级列表BaseExpandableListAdapter

博客:http://blog.csdn.net/muyang_ren

一、资源文件

array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- group-->
    <string-array name="group_values">
        <item>hello1</item>
        <item>hello2</item>
        <item>hello3</item>
        <item>hello4</item>
    </string-array>

    <!-- childs-->
    <string-array name="child_values1">
        <item>aaaaaaa</item>
    </string-array>

    <string-array name="child_values2">
        <item>bbbbbbb</item>
    </string-array>

    <string-array name="child_values3">
        <item>ccccccc</item>
    </string-array>

    <string-array name="child_values4">
        <item>ddddddd</item>
    </string-array>
</resources>
           

color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="black">#000000</color>
    <color name="white">#ffffff</color>
    <color name="transparent">#00000000</color>
    <!--header-->
    <color name="MyAPP_header_color">#7A9DEB</color>
    <color name="back_white_color">#FDFCFD</color>
    <!--listview 分隔条颜色-->
    <color name="childdivider_color">#D3DEEB</color>

    <!--待选择的-->
    <color name="line_color">#6bc78b</color>
    <color name="title_bg">#008B45</color>
    <color name="setting_item_bg">#dedfe0</color>
    <color name="back">#efeff4</color>
    <color name="head_text_color">#008B45</color>
    <color name="header_color">#ffffff</color>
    <color name="btn_pressed_color">#008B00</color>
    <color name="item_text_color">#2b2b2b</color>
    <color name="item_line_color">#c8c7cc</color>
</resources>
           

dimens.xml

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>

    <!--header-->
    <dimen name="header_height">50dp </dimen>

    <dimen name="header_imagebutton_height"> 50dp </dimen>
    <dimen name="header_imagebutton_width">  50dp </dimen>
    <dimen name="title_button_width">   50dp </dimen>
    <dimen name="title_textview_width"> 100dp</dimen>

    <!-- list view-->
    <dimen name="parent_list_height"> 30dp </dimen>
    <dimen name="group_list_left">10dp</dimen>

    <dimen name="children_list_height"> 30dp </dimen>
    <dimen name="children_list_left">15dp</dimen>
</resources>
           

二、xml布局

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.example.lianghuiyong.myapplication.MainActivity">

    <RelativeLayout
        android:id="@+id/header_layout"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/header_height"
        android:background="@color/MyAPP_header_color">
        <ImageButton
            android:id="@+id/header_setting"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/header_setting"
            android:layout_marginLeft="18dp"
            android:layout_centerVertical="true"
            android:contentDescription="imagebutton" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="@string/header_title"
            android:layout_centerHorizontal="true"
            android:layout_centerInParent="true"/>

        <TextView
            android:id="@+id/header_exit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="@string/header_out"
            android:clickable="true"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:layout_marginRight="10dp" />
    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_below="@+id/header_layout">
        <ExpandableListView
            android:id="@+id/list_main"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            />
    </LinearLayout>
</RelativeLayout>
           

三、Activity

MainActivity.java

package com.example.lianghuiyong.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ExpandableListView;

import com.example.lianghuiyong.myapplication.myappadpter.doubleListAdapter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ExpandableListView main_list = null;
    private List group = new ArrayList();
    private List<List<String>> child = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_list =(ExpandableListView)findViewById(R.id.list_main);

        //获取xml的array-string数组,然后转换成List
        group = Arrays.asList(getResources().getStringArray(R.array.group_values));
        child.add(Arrays.asList(getResources().getStringArray(R.array.child_values1)));
        child.add(Arrays.asList(getResources().getStringArray(R.array.child_values2)));
        child.add(Arrays.asList(getResources().getStringArray(R.array.child_values3)));
        child.add(Arrays.asList(getResources().getStringArray(R.array.child_values4)));
        Log.d("lhy", "group = " + group);
        Log.d("lhy", "child = " + child);

        main_list.setAdapter(new doubleListAdapter(group, child));
    }
}
           

四、适配器

package com.example.lianghuiyong.myapplication.myappadpter;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.lianghuiyong.myapplication.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2015/11/26.
 */
public class doubleListAdapter extends BaseExpandableListAdapter {

    private List group = new ArrayList();
    private List<List<String>> child = new ArrayList<>();

    public doubleListAdapter(List group, List<List<String>> child) {

            this.group = group;
            this.child = child;
            Log.d("lhy","group = " + this.group);
            Log.d("lhy","child = " + this.child);
            Log.d("lhy","group.size() = " + group.size());
    }

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

    @Override
    public int getChildrenCount(int groupPosition) {
        return child.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return group.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return (child.get(groupPosition).get(childPosition));
    }

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

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

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

    @Override
    public View getGroupView(int groupPosition, boolean b, View view, ViewGroup viewGroup) {
        //实例化 groupText 并设置属性
        TextView groupText = new TextView(viewGroup.getContext());
        groupText.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
        groupText.setPadding(70, 0, 0, 0);
        groupText.setTextSize(20);
        groupText.setText(getGroup(groupPosition).toString());//添加数据
        return groupText;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
        //child LinearLayoutshilihua 属性设置
        LinearLayout linearLayout = new LinearLayout(viewGroup.getContext());

        //child childText实例化并设置属性
        TextView childText = new TextView(viewGroup.getContext());
        childText.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));
        childText.setPadding(70, 0, 0, 0);
        childText.setTextSize(20);
        childText.setText(getChild(groupPosition,childPosition).toString());
        //返回linearLayout实例
        linearLayout.addView(childText);
        return linearLayout;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}