android ExpandableListView 四级目录结构

来源:互联网 发布:软件测试基础知识书籍 编辑:程序博客网 时间:2024/05/18 02:21

今天给大家分享 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.csdn.net/detail/qq_15643219/9240509

0 0