java获取下级列表数量_实现多级列表(二级列表嵌套)

这是一个关于如何在Java中实现多级列表,特别是二级列表嵌套,并且获取每个组下的子项数量的示例。通过自定义BaseExpandableListAdapter,展示了如何处理班级(一级条目)及其对应的子类(二级条目),并在适当的位置计算和显示子项的数量。
摘要由CSDN通过智能技术生成

package com.example.jixiaxian;

import android.app.Activity;

import android.content.Context;

import android.graphics.Color;

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.CheckBox;

import android.widget.TextView;

import java.util.List;

public class ClassesExpandableListViewAdapterextends BaseExpandableListAdapter {

// 集合

private Listclasses;

// 创建布局使用

private Contextactivity;

private boolean but;

private int grs;

public ClassesExpandableListViewAdapter(List classes, Context activity) {

this.classes = classes;

this.activity = activity;

}

@Override

public int getGroupCount() {

// 获取一级条目的数量  就是班级的大小

return classes.size();

}

@Override

public int getChildrenCount(int groupPosition) {

// 当它子空间没有 数据时

if(classes.get(groupPosition).getCHILD()!=null){

int size =classes.get(groupPosition).getCHILD().size();

Log.e("11111","getChildrenCount: "+size );

return classes.get(groupPosition).getCHILD().size();

}

return  0;

}

@Override

public Object getGroup(int groupPosition) {

// 获取一级条目的对应数据

return classes.get(groupPosition);

}

@Override

public Object getChild(int groupPosition,int childPosition) {

// 获取对应一级条目下二级条目的对应数据  感觉没什么用

return classes.get(groupPosition).getCHILD().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 false;

}

@Override

public View getGroupView(int groupPosition,boolean isExpanded, View convertView, ViewGroup parent) {

// 获取对应一级条目的View  和ListView 的getView相似

String leaf =classes.get(groupPosition).getLEAF();

//数据源里的  LEAF 是  1  是 没有子数据  2是 有数据

ViewHodule hodule=null;

if("2".equals(leaf)){

View inflate = LayoutInflater.from(activity).inflate(R.layout.layout_item2,null);

CheckBox  checkBox = inflate.findViewById(R.id.cbx1);

TextView  viewById = inflate.findViewById(R.id.zi2);

//当点击的 那个索引时才 打开图片

if(grs==groupPosition){

checkBox.setChecked(but);

}

viewById.setText(classes.get(groupPosition).getNAME());

return inflate;

}else{

return getGenericView(classes.get(groupPosition).getNAME());

}

}

public void setSetBuon(boolean b,int groupPosition) {

//是否展开状态

but=b;

//记录索引

grs=groupPosition;

}

class  ViewHodule{

TextViewzi1;

CheckBoxbox;

}

@Override

public View getChildView(int groupPosition,int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {

// 获取对应二级条目的View  和ListView 的getView相似

return  getGenericView1(classes.get(groupPosition).getCHILD().get(childPosition).getNAME());

}

@Override

public boolean isChildSelectable(int groupPosition,int childPosition) {

// 根据方法名,此处应该表示二级条目是否可以被点击  先返回true 再讲

return true;

}

/**

* 根据字符串生成布局,,因为我没有写layout.xml 所以用java 代码生成

*

*      实际中可以通过Inflate加载自己的自定义布局文件,设置数据之后并返回

* @param string

* @return

*/

private TextView getGenericView(String string) {

AbsListView.LayoutParams layoutParams =new AbsListView.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

TextView textView =new TextView(activity);

textView.setLayoutParams(layoutParams);

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);

//设置  北方大区  左右距离

textView.setPadding(180,30,0,30);

textView.setText(string);

textView.setTextSize(20);

textView.setTextColor(Color.BLACK);

return textView;

}

private TextView getGenericView1(String string) {

AbsListView.LayoutParams layoutParams =new AbsListView.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

TextView textView =new TextView(activity);

textView.setLayoutParams(layoutParams);

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);

//设置  北方大区里第3级  左右距离

textView.setPadding(240,30,0,30);

textView.setText(string);

textView.setTextSize(20);

textView.setTextColor(Color.BLACK);

return textView;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值