android 三级级联筛选列表,写给程序员的Flutter详细教程
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详细教程相关推荐
- android插件化好处,写给程序员的Flutter详细教程,面试必问
前言 先简单交代一下背景吧,本人毕业于某不知名985的本硕,17年毕业加入阿里,今年下半年跳槽到了头条,一直从事后端研发相关的工作. 之前没有实习经历,算是两年半的工作经验吧.这两年半之间完成了一次晋 ...
- Android开发者跳槽必备:写给程序员的Flutter详细教程,大厂直通车!
一.引言 现在已经是十月份的月末了,金九银十,这个找工作和面试的热潮已经渐渐退隐. 潮涨潮退,有的人从里面收获了心仪的offer:有的人走了一趟,一无所获,或者收获寥寥,无甚满意:还有的人在观望,等待 ...
- 写给程序员的Flutter详细教程,大厂直通车!
开篇 说一下我大概的情况.渣本毕业,工作已经有快3年了,从高中就开始玩小破站.无论是学习还是日常放松都是在b站.大学主学的软件技术专业,所以,入职bilibili是我大学时期给自己定的小目标. 在学校 ...
- 最强整理!写给程序员的Flutter详细教程,大厂直通车!
前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会热修复,懂不懂性能优化,火箭造得让你猝及不防,结果就是凉凉:现如今市场,热修复.性能优化.NDK.APP开发.架构.源码等可以 ...
- 安卓交流软件!写给程序员的Flutter详细教程,技术详细介绍
雪上加霜 本人一名Android程序员,今年29岁了.大厂小厂都呆过,现在在腾讯工作!明明工作顺利,家庭和睦儿女成全,但是总是会感觉到,一股无形的压力,推着我走!作为一名程序员我最怕的不是996,也是 ...
- 写给程序员的Flutter详细教程,实战解析
导语 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 音视频的开发,往往是比较难的,而这个比较难 ...
- 写给前端工程师的 Flutter 详细教程
本文作者:hicc,腾讯 CSIG 前端开发工程师 最爱折腾的就是前端工程师了,从 jQuery 折腾到 AngularJs,再折腾到 Vue.React.最爱跨屏的也是前端工程师,从 phonega ...
- 写给程序员看的“幻灯片”制作教程
大家好,我叫谢伟,是一名程序员. 如果你比较关注国外开发者大会,你经常可以看到,一些程序员分享一些在线可以查看的"幻灯片",当然这里的幻灯片和微软 Office 旗下的 Power ...
- 写给程序员的管理入门课程 -《格鲁夫给经理人的第一课》
写给程序员的管理入门课程 -<格鲁夫给经理人的第一课> 序 格鲁夫给经理人的第一课 <格鲁夫给经理人的第一课> 最早出版于 2007 年,书原名为<High Output ...
最新文章
- checkbox的相关知识点
- MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询
- centos/linux 安装node.js
- Java案例:清洗网址垃圾字符
- mysql标记上具有语法错误_ProgrammingError:(1064,'您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册以获得正确的语法...
- Excel宏的自动运行设置
- jxta java_JXTA-JavaP2P JXT
- 页面最上方的搜索和logo叫什么_JS实现京东首页之页面顶部、Logo和搜索框功能...
- (Matlab实现)CNN卷积神经网络图片分类
- 彻底搞清楚 dB 和 dBm
- 跟着吴恩达学习机器学习 2代价函数
- 固态硬盘故障表现及数据恢复方案
- sql中向下取整怎么取_SQL中的取整函数FLOOR、ROUND、CEIL、TRUNC、SIGN
- 华为计算机主板,[转帖]华为PC端台式机电脑来啦!自研主板及自研CPU处理器
- 年度盘点丨2017十大最佳科技创新产品!
- 实时操作系统UCOS学习笔记1----UCOSII简介
- phd计算机考试,21校计算机Phd详细申请经验
- YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
- flexbuilder 开发工具
- FICO配置详解之四:成本中心会计