今天给大家分享 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