android两级分类列表且子列表item不同布局实现

简介: android两级分类列表且子列表item不同布局实现

想必大家开发过程中一定碰到过这样的界面

image.png

上面这个图, 看到后分析一下,  最上面是一个滚动轮播图, 肯定滑动的时候是要跟着可以滑动的,这个应该就是一个headview

下面这部分 ,要求是这样的    最新视频分类 下面的视频 是可以显示多个的  也就是一个listview效果  其它分类下面的 item 是 类似gridview效果

看到这个效果 应该想到的是recycleview和 expandlistview实现下面的布局 然后 再addheaderview ,完美解决。

我用的是 expandListView实现的 。

说下具体开发流程:


1.写 上面的滚动轮播图界面  单独一个xml  然后作为headerView


2.Expandlistview可以实现  分类两级列表效果 大家都可以做到

3.写完后   发现,expandlistView的子布局 有两种  一种是listview效果  一种是gridview效果 这种情况 我们就要自己单独写一个逻辑处理 了 。第二种布局  每个item是两条数据

最主要是对getChildType和 getChildrenCount 方法进行处理判断

处理的原理是 这样: 判断需要 第二种布局的时候   count变为  原来的一半  如果数目不够 就就是  count的一半 加1 ....

先说一下 Expandlistview 就是一个普通的ExpandListView 只不过要是想要这样的效果 需要设置几步属性


1.去掉默认箭头

  mListView.setGroupIndicator(null);// 这个是去掉父级的箭头

2.设置父级默认全部展开

  for (int i = 0; i < liveList.size(); i++) {
     mListView.expandGroup(i);
  }

3.设置点击不能收缩

mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(
ExpandableListView parent, View v,
int groupPosition, long id) {
return true;
}
});

再说一下 子类的需要处理的一些问题

@Override
public int getChildType(int groupPosition, int childPosition) {
try {
if (groupPosition == 0 && (mLiveList.get(groupPosition).getId().equals("-1")))
return TYPE_1;
else
return TYPE_2;
} catch (Exception e) {
System.out.println("Exception-->>" + e.toString());
return TYPE_1;
}
}
@Override
public int getChildrenCount(int groupPosition) {
int childSize = mLiveList.get(groupPosition).getVideoList().size();
if(groupPosition==0){
return childSize;//返回的是第一种item布局的size
}else{
int count = childSize / mColumn;
if (childSize % mColumn > 0) {
count++;
}
return count;//返回的是子项第二种布局的size
}
}

上面的 mColumn 是 第二种布局里面是 每行有多少个item,如上图  第二种item里面有两个子项就是 private int mColumn = 2;

还有特别需要注意的一点是

  @Override
  public int getChildTypeCount() {
    return 3;
  }

这个方法 返回的是 子布局的总共有几种样式  


有人说 上面子布局有两种, type 为什么返回3  原因是我写了2 会报  数组越界异常ArrayIndexOutOfBoundsException: length=3; index=3


具体原理我还没搞清楚,因为着急做项目,这个大家如果碰到了,可以研究一下。


然后给子项的第二种布局适配数据

          List<String> list = new ArrayList<String>();
          for (int i = 0; i < mColumn; i++) {
              int n = childPosition * mColumn + i;
              if (n < mList.get(groupPosition).getChildList().size()) {
                  list.add(mList.get(groupPosition).getChildList().get(n));
              }
          }
      childHolderTwo.adapter.setmList(list);
      childHolderTwo.adapter.notifyDataSetChanged();

这个逻辑的意思是: 拿到对应position 的list,然后add到一个新的list里面 这个list里面存的是 一行设置显示几条数据,list里面存入的就是几跳数据。

相关文章
|
17天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
64 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
17天前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
45 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
17天前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
46 4
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
167 10
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
8月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
194 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
882 11
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
306 1
|
12月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
628 0
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
343 15

热门文章

最新文章