android ExpandableListView 四级目录结构

本文介绍如何使用Android的ExpandableListView实现四级树形目录结构,包括详细的代码示例及组件说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天给大家分享 android 的四级树形目录结构,用ExpandableListView 实现

这里写图片描述

需要用到以下几个类,一个主activity,4个object,3个adapter

这里写图片描述

下面上源码
主activity 数据加载

package com.hokas.expandablelistview;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ExpandableListView;

import com.example.hokas.myapplication.R;

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

public class MainActivity extends Activity {

    private ExpandableListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initViews();
        initData();
    }
    /**初始化*/
    private void initViews() {
        listView = (ExpandableListView) findViewById(R.id.listView);
    }
    /**加载数据*/
    public void initData() {
        final List<PollcyOne> list = new ArrayList<>();
        for (int i = 0; i < 7; i++) {
            PollcyOne pollcyOne = new PollcyOne();
            pollcyOne.content = "一级目录" + (i+1);
            list.add(pollcyOne);
            for (int j = 0; j < 3; j++) {
                PollcyTwo pollcyTwo = new PollcyTwo();
                pollcyTwo.content = "二级目录" + (j+1);
                pollcyOne.pollcyTwos.add(pollcyTwo);
                for (int k = 0; k < 4; k++) {
                    PollcyThree pollcyThree = new PollcyThree();
                    pollcyThree.content = "三级目录" + (k+1);
                    pollcyTwo.pollcyThrees.add(pollcyThree);
                    for (int l = 0; l < 3; l++) {
                        PollcyFour pollcyFour = new PollcyFour();
                        pollcyFour.content = "四级目录" + (l+1);
                        pollcyThree.pollcyFours.add(pollcyFour);
                    }
                }
            }
        }
        VisitPollcyTwoAdapter adapter = new VisitPollcyTwoAdapter(this,list);
        listView.setAdapter(adapter);
    }
}

四个object

package com.hokas.expandablelistview;

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

/**
 * 一级条目
 * Created by hokas on 2015/11/4.
 */
public class PollcyOne {
    public String content;
    public List<PollcyTwo> pollcyTwos = new ArrayList<>();

    @Override
    public String toString() {
        return "PollcyOne{" +
                "content='" + content + '\'' +
                ", pollcyTwos=" + pollcyTwos +
                '}';
    }
}
package com.hokas.expandablelistview;

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

/**
 * 二级条目
 * Created by hokas on 2015/11/4.
 */
public class PollcyTwo {
    public String content;
    public List<PollcyThree> pollcyThrees = new ArrayList<>();

    @Override
    public String toString() {
        return "PollcyTwo{" +
                "content='" + content + '\'' +
                ", pollcyThrees=" + pollcyThrees +
                '}';
    }
}
package com.hokas.expandablelistview;

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

/**
 * 三级条目
 * Created by hokas on 2015/11/4.
 */
public class PollcyThree {
    public String content;
    public List<PollcyFour> pollcyFours = new ArrayList<>();

    @Override
    public String toString() {
        return "PollcyThree{" +
                "content='" + content + '\'' +
                ", pollcyFours=" + pollcyFours +
                '}';
    }
}
package com.hokas.expandablelistview;


/**
 * 四级条目
 * Created by hokas on 2015/11/4.
 */
public class PollcyFour {
    public String content;

    @Override
    public String toString() {
        return "PollcyFour{" +
                "content='" + content + '\'' +
                '}';
    }
}

三个adapter

package com.hokas.expandablelistview;

import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

import java.util.List;

/**
 * 二级级目录
 * Created by hokas on 2015/11/4.
 */
public class VisitPollcyTwoAdapter extends BaseExpandableListAdapter {

    private Context context;
    private List<PollcyOne> pollcyOnes;

    public VisitPollcyTwoAdapter(Context context,List<PollcyOne> pollcyOnes) {
        this.context = context;
        this.pollcyOnes = pollcyOnes;
    }

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

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

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return pollcyOnes.get(groupPosition).pollcyTwos.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;
    }

    private TextView getTextView(){
        AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);
        TextView textView = new TextView(context);
        textView.setLayoutParams(layoutParams);
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        textView.setPadding(40, 0, 0, 0);
        textView.setTextSize(20);
        return textView;
    }
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        TextView textView = getTextView();
        textView.setText(pollcyOnes.get(groupPosition).content);
        return textView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        CustExpListview listView = new CustExpListview(context);
        VisitPollcyThreeAdapter visitPollcyThreeAdapter = new VisitPollcyThreeAdapter(context,pollcyOnes.get(groupPosition).pollcyTwos);
        listView.setAdapter(visitPollcyThreeAdapter);
        listView.setGroupIndicator(null);
        return listView;
    }

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

    private class CustExpListview extends ExpandableListView {

        public CustExpListview(Context context) {
            super(context);
        }

        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(960,
                    MeasureSpec.AT_MOST);
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(600,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}
package com.hokas.expandablelistview;

import android.content.Context;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

import java.util.List;

/**
 * 三级级目录
 * Created by hokas on 2015/11/4.
 */
public class VisitPollcyThreeAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<PollcyTwo> pollcyTwos;
    public VisitPollcyThreeAdapter(Context context,List<PollcyTwo> pollcyTwos) {
        this.context = context;
        this.pollcyTwos = pollcyTwos;
    }

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

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

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return pollcyTwos.get(groupPosition).pollcyThrees.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;
    }

    private TextView getTextView(){
        AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);
        TextView textView = new TextView(context);
        textView.setLayoutParams(layoutParams);
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        textView.setPadding(80, 0, 0, 0);
        textView.setTextSize(20);
        return textView;
    }
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        TextView textView = getTextView();
        textView.setText(pollcyTwos.get(groupPosition).content);
        Log.d("VisitPollcyThreeAdapter", pollcyTwos.get(groupPosition).content);
        return textView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        CustExpListview listView = new CustExpListview(context);
        VisitPollcyFourAdapter visitPollcyThreeAdapter = new VisitPollcyFourAdapter(context,pollcyTwos.get(groupPosition).pollcyThrees);
        listView.setAdapter(visitPollcyThreeAdapter);
        listView.setGroupIndicator(null);
        return listView;
    }

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

    private class CustExpListview extends ExpandableListView {

        public CustExpListview(Context context) {
            super(context);
        }

        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            widthMeasureSpec = MeasureSpec.makeMeasureSpec(1000,
                    MeasureSpec.AT_MOST);
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(700,
                    MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}
package com.hokas.expandablelistview;

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

import java.util.List;

/**
 * 三级级目录
 * Created by hokas on 2015/11/4.
 */
public class VisitPollcyFourAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<PollcyThree> pollcyThrees;
    public VisitPollcyFourAdapter(Context context, List<PollcyThree> pollcyThrees) {
        this.context = context;
        this.pollcyThrees = pollcyThrees;
    }

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

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

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

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return pollcyThrees.get(groupPosition).pollcyFours.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;
    }

    private TextView getTextView(){
        AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);
        TextView textView = new TextView(context);
        textView.setLayoutParams(layoutParams);
        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        textView.setPadding(120, 0, 0, 0);
        textView.setTextSize(20);
        return textView;
    }
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        TextView textView = getTextView();
        textView.setText(pollcyThrees.get(groupPosition).content);
        return textView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        TextView textView = getTextView();
        textView.setPadding(160, 0, 0, 0);
        textView.setText(pollcyThrees.get(groupPosition).pollcyFours.get(childPosition).content);
        return textView;
    }

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

activity的布局文件

<?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.hokas.expandablelistview.MainActivity">

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

直接上源码 http://download.youkuaiyun.com/detail/qq_15643219/9240509

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值