android:groupIndicator="@null"

android:scrollbars=“none” />

activity中 核心代码

//一级

mViewPager = findViewById(R.id.category_viewpager);

LayoutInflater inflater = LayoutInflater.from(this);

view1 = inflater.inflate(R.layout.target_first_parger, null);

view2 = inflater.inflate(R.layout.target_second_parger, null);

mFirstListView = view1.findViewById(R.id.target_first_lv);

mSecondListView = view2.findViewById(R.id.target_second_exl);

mFirstAdapter = new TargetCategoryFirstAdapter(this, firstBeans);

mFirstAdapter.setSelectedBackgroundResource(R.drawable.select_white);//选中时

mFirstAdapter.setHasDivider(false);

mFirstAdapter.setNormalBackgroundResource(R.color.target_bg_gray);//未选中

mFirstListView.setAdapter(mFirstAdapter);

views.add(view1);

views.add(view2);//加载了一二级菜单

mViewPager.setAdapter(new MyPagerAdapter(views));

初始化数据及点击事件部分

private void initSelectCategory(CategoryBean bean) {

if (bean != null && bean.getData() != null) {

firstBeans = bean.getData();

}

FirstBean fBean = new FirstBean();

fBean.setName(“全部”);

fBean.setType(“0”);

fBean.setItems(new ArrayList());

fBean.setSelect(true);

firstBeans.add(0, fBean);

if (mFirstAdapter == null) {

mFirstAdapter = new TargetCategoryFirstAdapter(TargetFilterActivity.this, firstBeans);

mSecondListView.setAdapter(mSecondAdapter);

} else {

mFirstAdapter.setData(firstBeans);

}

mFirstListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

FirstBean firstBean = firstBeans.get(position);

for (int i = 0; i < firstBeans.size(); i++) {

if (i == position) {

firstBeans.get(i).setSelect(true);

} else {

firstBeans.get(i).setSelect(false);

}

}

if (mFirstAdapter == null) {

mFirstAdapter = new TargetCategoryFirstAdapter(TargetFilterActivity.this, firstBeans);

mSecondListView.setAdapter(mSecondAdapter);

} else {

mFirstAdapter.setData(firstBeans);

}

if (firstBean.getType().equals(“0”)) {//不限

if (mSecondAdapter != null) {

mSecondAdapter.setData(new ArrayList());

mSecondAdapter.notifyDataSetChanged();

}

} else {

mSecondList = firstBean.getItems();

for (int i = 0; i < mSecondList.size(); i++) {

mSecondList.get(i).setIsSelect(false);

for (int j = 0; j < mSecondList.get(i).getItems().size(); j++) {

mSecondList.get(i).getItems().get(j).setIsSelect(false);

}

}

if (mSecondAdapter == null) {

mSecondAdapter = new TargetCategorySecondAdapter(TargetFilterActivity.this, mSecondList);

mSecondListView.setAdapter(mSecondAdapter);

} else {

mSecondAdapter.setData(mSecondList);

}

String secondType = firstBean.getType();

String secondName = firstBean.getName();

if (secondType.equals("-1")) {

mProjectType = mFirstProjectType;

mProjectTypeName = mFirstProjectTypeName;

} else {

mProjectType = mFirstProjectType + “/” + secondType;

mProjectTypeName = mFirstProjectTypeName + “/” + secondName;

}

//默认全部展开

for (int i = 0; i < mSecondList.size(); i++) {

if (mSecondListView != null) {

mSecondListView.expandGroup(i);

}

}

}

}

});

//二级

mSecondListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

@Override

public boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) {

for (int i = 0; i < mSecondList.size(); i++) {

if (i == groupPosition) {

mSecondList.get(i).setIsSelect(true);

} else {

mSecondList.get(i).setIsSelect(false);

}

for (int j = 0; j < mSecondList.get(i).getItems().size(); j++) {

mSecondList.get(i).getItems().get(j).setIsSelect(false);

}

}

String thirdType = mSecondList.get(groupPosition).getType();

String thirdName = mSecondList.get(groupPosition).getName();

mProjectType = mFirstProjectType + “/” + thirdType;

mProjectTypeName = mFirstProjectTypeName + “/” + thirdName;

mSecondAdapter.setData(mSecondList);

return true;

}

});

mSecondListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

@Override

public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {

for (int i = 0; i < mSecondList.size(); i++) {

if (i == groupPosition) {

mSecondList.get(i).setIsSelect(true);

} else {

mSecondList.get(i).setIsSelect(false);

}

List<SecondBean.ThirdBean> thirdList = mSecondList.get(i).getItems();

for (int j = 0; j < thirdList.size(); j++) {

if (i == groupPosition && j == childPosition) {

thirdList.get(j).setIsSelect(true);

} else {

thirdList.get(j).setIsSelect(false);

}

}

}

String thirdType = mSecondList.get(groupPosition).getType();

String thirdName = mSecondList.get(groupPosition).getName();

String fourType = mSecondList.get(groupPosition).getItems().get(childPosition).getType();

String fourName = mSecondList.get(groupPosition).getItems().get(childPosition).getName();

mProjectType = mFirstProjectType + “/” + thirdType + “/” + fourType;//工程类型id

mProjectTypeName = mFirstProjectTypeName + “/” + thirdName + “/” + fourName;//工程名称 前端显示

mSecondAdapter.setData(mSecondList);

return false;

}

});

}

MyViewPager

package com.jky.mobile_gczjjc.widget;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

/**

  • Created by LaiYingtang on 2016/5/22.

  • 主页面左右滑动

*/

public class MyViewPager extends ViewPager {

public MyViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyViewPager(Context context) {

super(context);

}

//判断menu在x,y的位置

public void scrollTo(int x,int y){

if(getAdapter()==null||x>getWidth()*(getAdapter().getCount()-2)){

return;

}

super.scrollTo(x,y);

}

}

TargetCategoryFirstAdapter

package com.jky.mobile_gczjjc.adapter;

import android.content.Context;

import android.graphics.Color;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import com.jky.mobile_gczjjc.R;

import com.jky.mobile_gczjjc.bean.CategoryBean.FirstBean;

import java.util.ArrayList;

import java.util.List;

/**

  • 指标 建筑分类 第一级适配器

  • @author zlw

*/

public class TargetCategoryFirstAdapter extends BaseAdapter {

private Context mContext;

private List firstBeans =new ArrayList<>();

private int mSelectedBackgroundResource;//选中item时的背景颜色

private int mNormalBackgroundResource;//为选中的背景颜色

private boolean hasDivider = true;

public void setSelectedBackgroundResource(int mSelectedBackgroundResource) {

this.mSelectedBackgroundResource = mSelectedBackgroundResource;

}

public void setNormalBackgroundResource(int mNormalBackgroundResource) {

this.mNormalBackgroundResource = mNormalBackgroundResource;

}

public void setHasDivider(boolean hasDivider) {

this.hasDivider = hasDivider;

}

public TargetCategoryFirstAdapter(Context mContext, List firstBeans) {

this.mContext = mContext;

this.firstBeans = firstBeans;

}

public void setData(List data) {

this.firstBeans = data;

notifyDataSetChanged();

}

@Override

public int getCount() {

if (firstBeans == null) {

return 0;

}

return firstBeans.size();

}

@Override

public Object getItem(int position) {

if (firstBeans == null) {

return null;

}

return firstBeans.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder vh = null;

if (convertView == null) {

vh = new ViewHolder();

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_target_category_first, null);

vh.itemLayout = convertView.findViewById(R.id.menu_item_ly);

vh.nameText = convertView.findViewById(R.id.name_rb);

vh.dividerTextView = convertView.findViewById(R.id.menu_item_divider);

convertView.setTag(vh);

} else {

vh = (ViewHolder) convertView.getT
ag();

}

FirstBean firstBean = firstBeans.get(position);

vh.nameText.setText(firstBean.getName());//设置标题

if (firstBean.isSelect){

vh.nameText.setTextColor(mContext.getResources().getColor(R.color.common_blue));

vh.itemLayout.setBackgroundResource(mSelectedBackgroundResource);

}else{

vh.nameText.setTextColor(Color.BLACK);

vh.itemLayout.setBackgroundResource(mNormalBackgroundResource);

}

//隐藏view

vh.dividerTextView.setVisibility(hasDivider ? View.VISIBLE : View.INVISIBLE);

return convertView;

}

private class ViewHolder{

private View itemLayout;

private TextView nameText;

private TextView dividerTextView;

}

}

TargetCateGorySecondAdapter

package com.jky.mobile_gczjjc.adapter;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseExpandableListAdapter;

import android.widget.TextView;

import com.jky.mobile_gczjjc.R;

import com.jky.mobile_gczjjc.bean.CategoryBean.FirstBean.SecondBean;

import com.jky.mobile_gczjjc.bean.CategoryBean.FirstBean.SecondBean.ThirdBean;

import java.util.ArrayList;

import java.util.List;

/**

  • 指标 建筑分类 第二级适配器

  • @author zlw

*/

public class TargetCategorySecondAdapter extends BaseExpandableListAdapter {

private Context mContext;

private List secondBeans= new ArrayList<>();

private int selectedPos = -1;

public TargetCategorySecondAdapter(Context mContext, List menuDatas) {

this.mContext = mContext;

this.secondBeans = menuDatas;

}

//选中的position,及时更新数据

public void setSelectedPos(int selectedPos) {

this.selectedPos = selectedPos;

notifyDataSetChanged();

}

public void setData(List data) {

this.secondBeans = data;

notifyDataSetChanged();

}

@Override

public int getGroupCount() {

return secondBeans.size();

}

@Override

public int getChildrenCount(int groupPosition) {

return secondBeans.get(groupPosition).getItems().size();

}

@Override

public Object getGroup(int groupPosition) {

return secondBeans.get(groupPosition);

}

@Override

public Object getChild(int groupPosition, int childPosition) {

return secondBeans.get(groupPosition).getItems().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 isExpanded, View convertView, ViewGroup parent) {

ViewHolder vh = null;

if (convertView == null) {

vh = new ViewHolder();

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_target_category_second, null);

vh.menu_item_ly = convertView.findViewById(R.id.menu_item_ly);

vh.nameText = convertView.findViewById(R.id.name_rb);

convertView.setTag(vh);

} else {

vh = (ViewHolder) convertView.getTag();

}

SecondBean secondBean = secondBeans.get(groupPosition);

if (secondBean.isSelect){

vh.nameText.setTextColor(mContext.getResources().getColor(R.color.red_text_color));

}else{

vh.nameText.setTextColor(mContext.getResources().getColor(R.color.gray_text_color));

}

vh.nameText.setText(secondBean.getName());//设置标题

return convertView;

}

@Override
groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

ViewHolder vh = null;

if (convertView == null) {

vh = new ViewHolder();

convertView = LayoutInflater.from(mContext).inflate(R.layout.item_target_category_second, null);

vh.menu_item_ly = convertView.findViewById(R.id.menu_item_ly);

vh.nameText = convertView.findViewById(R.id.name_rb);

convertView.setTag(vh);

} else {

vh = (ViewHolder) convertView.getTag();

}

SecondBean secondBean = secondBeans.get(groupPosition);

if (secondBean.isSelect){

vh.nameText.setTextColor(mContext.getResources().getColor(R.color.red_text_color));

}else{

vh.nameText.setTextColor(mContext.getResources().getColor(R.color.gray_text_color));

}

vh.nameText.setText(secondBean.getName());//设置标题

return convertView;

}

@Override

android 三级级联筛选列表,写给程序员的Flutter详细教程相关推荐

  1. android插件化好处,写给程序员的Flutter详细教程,面试必问

    前言 先简单交代一下背景吧,本人毕业于某不知名985的本硕,17年毕业加入阿里,今年下半年跳槽到了头条,一直从事后端研发相关的工作. 之前没有实习经历,算是两年半的工作经验吧.这两年半之间完成了一次晋 ...

  2. Android开发者跳槽必备:写给程序员的Flutter详细教程,大厂直通车!

    一.引言 现在已经是十月份的月末了,金九银十,这个找工作和面试的热潮已经渐渐退隐. 潮涨潮退,有的人从里面收获了心仪的offer:有的人走了一趟,一无所获,或者收获寥寥,无甚满意:还有的人在观望,等待 ...

  3. 写给程序员的Flutter详细教程,大厂直通车!

    开篇 说一下我大概的情况.渣本毕业,工作已经有快3年了,从高中就开始玩小破站.无论是学习还是日常放松都是在b站.大学主学的软件技术专业,所以,入职bilibili是我大学时期给自己定的小目标. 在学校 ...

  4. 最强整理!写给程序员的Flutter详细教程,大厂直通车!

    前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会热修复,懂不懂性能优化,火箭造得让你猝及不防,结果就是凉凉:现如今市场,热修复.性能优化.NDK.APP开发.架构.源码等可以 ...

  5. 安卓交流软件!写给程序员的Flutter详细教程,技术详细介绍

    雪上加霜 本人一名Android程序员,今年29岁了.大厂小厂都呆过,现在在腾讯工作!明明工作顺利,家庭和睦儿女成全,但是总是会感觉到,一股无形的压力,推着我走!作为一名程序员我最怕的不是996,也是 ...

  6. 写给程序员的Flutter详细教程,实战解析

    导语 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 音视频的开发,往往是比较难的,而这个比较难 ...

  7. 写给前端工程师的 Flutter 详细教程

    本文作者:hicc,腾讯 CSIG 前端开发工程师 最爱折腾的就是前端工程师了,从 jQuery 折腾到 AngularJs,再折腾到 Vue.React.最爱跨屏的也是前端工程师,从 phonega ...

  8. 写给程序员看的“幻灯片”制作教程

    大家好,我叫谢伟,是一名程序员. 如果你比较关注国外开发者大会,你经常可以看到,一些程序员分享一些在线可以查看的"幻灯片",当然这里的幻灯片和微软 Office 旗下的 Power ...

  9. 写给程序员的管理入门课程 -《格鲁夫给经理人的第一课》

    写给程序员的管理入门课程 -<格鲁夫给经理人的第一课> 序 格鲁夫给经理人的第一课 <格鲁夫给经理人的第一课> 最早出版于 2007 年,书原名为<High Output ...

最新文章

  1. checkbox的相关知识点
  2. MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询
  3. centos/linux 安装node.js
  4. Java案例:清洗网址垃圾字符
  5. mysql标记上具有语法错误_ProgrammingError:(1064,'您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册以获得正确的语法...
  6. Excel宏的自动运行设置
  7. jxta java_JXTA-JavaP2P JXT
  8. 页面最上方的搜索和logo叫什么_JS实现京东首页之页面顶部、Logo和搜索框功能...
  9. (Matlab实现)CNN卷积神经网络图片分类
  10. 彻底搞清楚 dB 和 dBm
  11. 跟着吴恩达学习机器学习 2代价函数
  12. 固态硬盘故障表现及数据恢复方案
  13. sql中向下取整怎么取_SQL中的取整函数FLOOR、ROUND、CEIL、TRUNC、SIGN
  14. 华为计算机主板,[转帖]华为PC端台式机电脑来啦!自研主板及自研CPU处理器
  15. 年度盘点丨2017十大最佳科技创新产品!
  16. 实时操作系统UCOS学习笔记1----UCOSII简介
  17. phd计算机考试,21校计算机Phd详细申请经验
  18. YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
  19. flexbuilder 开发工具
  20. FICO配置详解之四:成本中心会计

热门文章

  1. 我们为什么选择计算机专业?为什么学习编程?
  2. python如何截长图_selenium定时爬取长截图
  3. 【WZOI】AC大礼包(1~130)
  4. php期末作业作业,作业作业作业作业作业作业
  5. 龙年贺词成语-龙字成语
  6. Pytorch Note46 生成对抗网络的数学原理
  7. 吃掉IT大象:从绿海开发到棕海开发
  8. MACD与KDJ合二为一指标公式怎么编写?
  9. 【水】【SCOI】 精简题解
  10. word07如何插入和删除分节符