Android利用ListView实现多种Item的复杂布局

Android ListView实现类似朋友圈的复杂布局 开发中时常会遇到用ListView实现类似朋友圈列表的复杂布局,如果一个条信息即为ListView中一项时,那么单个布局的结构会变的很复杂,也会影响列表滚动的流畅性。由于Adapter可以使用多种布局,所以这里采用的方式是将单个信息的布局拆分为多个ListView的item来达到优化的目的。借用facebook新闻页ListView优化中的一张图 先上一张效果图: 阅读详情

 

在Android开发中,可能会遇到一个可滚动且布局比较复杂的界面,但它并不是一个纯粹的List,类似如下图:

demo.png

通常实现方法可以直接用一个ScrollView将所有内容包起来,里面是列表的部分在代码中用动态添加布局的方式实现;或者外层ScrollView,里面列表部分用ListView(或RecyclerView)实现,但这样需要解决滑动冲突问题(有时并不能很好解决)……所以最好不要同时使用ScrollView和ListView(或RecyclerView),但如果单使用ScrollView,每次滑动返回时都会重新动态加载,如果页面图片比较多,可能会造成卡顿,所以要自己做缓存判断的处理,而ListView自带有缓存机制,处理相对比较方便。

那这种不是纯粹List的布局用ListView如何实现?它也并不是只是头尾部分不相同而已(ListView可以addHeader, addFooter), 所以要将它分成一个个不同类型的item。下面展示一个之前公司项目所实践用到的一个例子,效果demo如图:

ComplexListViewDemo.gif

嗯,其实也没什么难度,也就是如何将整个页面的划分为不同的item,并处理不同的数据模块,使代码更加模块化,直观而且更容易维护。其中HomeAdapter是处理List不同item的适配器,相对于普通适配器多了一个getItemViewType()方法的处理;ImageAdapter是图片轮播适配器;HomeItem是整个页面的数据模型,包含了所有item的不同数据模型,接收到网络数据时需要对数据加工再设置到HomeItem,然后根据ItemType 作为不同item类型的判断,再根据不同item获取对应的字段;各个item的数据处理是在单独一个ViewHolder上处理……

class HomeItem{
  private ItemType itemType; //作为不同item类型的判断
  private String tagName;
  private Special special;
  private Ad ad;
  private MenuPo[] menuPos;
  private List<MealShow> mealShowList;
  private List<TalentShow> talentShowList;
//……
}

另外,可以看到当上滑时,搜索框会悬停在顶部,此处用到一个小技巧,障眼法,单独的搜索框一直在顶部,通过在滑动的过程中控制它的显示和隐藏即可

mListView.setOnScrollListener(new AbsListView.OnScrollListener(){

  @Override
  public void onScrollStateChanged(AbsListView absListView, int i){
  }
  @Override

  public void onScroll(AbsListView absListView, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
    if (firstVisibleItem >= 1) {
      rlSearchBar.setVisibility(View.VISIBLE);
    } else {
    rlSearchBar.setVisibility(View.GONE);
    }
  }
});



RemoteViews嵌入ListView复杂布局 主要函数 public void setRemoteAdapter (int appWidgetId, int viewId, Intent intent) 当在widgets中使用集合(比如说ListView, StackView等等),在单独的一个条目中设置PendingIntents是非常浪费的,并且是不被允许的。然而一个单独的PendingIntents模板可以设置在集 阅读详情

相关推荐

Android 动态生成复杂的布局(View布局的子控件含自己的点击事件)

有时候会遇到一些工作计划的需求,大多数工作计划都会有统一的模板,即计划内容分类是一致的。 比如说周计划管理:每周都有7天,对于我们来说就会有两个方案:1、画7个相同布局 2、动态生成7个布局 之前有想过直接用ListView来做,其实也是可以的,但是涉及到一些复杂的需求,例如I:tem的子控件加点击事件,并通过该事件引发一系列操作刷新此Item内容,获取输入框内部内容等,ListView的劣势

拂塵丶的博客 7765

android listview 选择多个item,Android ListView存在多个item样式的处理方法

在项目开发的时候,相信大家可能会遇到一个ListView中出现多个不同的布局,遇到这个问题我的大致思路就是创建多个viewholder,在getViewType的时候设置不同位置的item用不同的viewholder,好了不废话那么多直接上代码:packagecom.sunny.youdao;importjava.util.ArrayList;importjava.util.List;imp...

weixin_42370743的博客 417

Android中实现可拖拽Item的ListView交互设计

在Android开发中,Adapter是连接数据与UI的关键桥梁。对于ListView控件而言,Adapter不仅负责将数据绑定到每个Item上,还承担着处理复杂交互行为的职责。在实现拖拽功能时,Adapter的结构和逻辑需要进行专门的定制与优化。本章将围绕自定义Adapter实现Item拖拽功能,从Adapter基础、拖拽逻辑实现、接口封装到最终实战案例,逐步展开深入剖析。为了实现可复用的拖拽逻辑,我们可以将拖拽事件的处理封装到Adapter内部,并通过接口回调机制通知外部逻辑。

weixin_28939623的博客 1025

Android ListView实现多种Item布局

前言 有时,我们的ListView的Item布局并非都是一样的,比如,我们需要一个按拼音排序的列表,如下图: 有的同学可能会说,直接把两种布局放在一个Item布局中,在getView中隐藏不用的那个布局不就行了。这种方法确实能够实现,也没什么问题,但是如果布局种类不止两种,而是20种或者更多呢?显然每次加载所有布局是很不明智的,而且很可能会造成界面卡顿。 其实,Google早想到了这一点,并提供...

weixin_33727510的博客 2852

基于Python的高考志愿辅助填报系统

在实际应用中,系统需要处理更复杂的数据,包括更多的高校和专业信息、更详细的录取规则、以及用户的历史选择等。系统需要提供用户友好的界面,让考生输入自己的信息和偏好,然后通过后端的模型计算出推荐的志愿列表。此外,系统还应该提供一些个性化的服务,如根据考生的输入动态调整推荐策略、保存用户的填报历史和偏好等。特征可能包括考生的分数、所在省份、文理科类别、专业偏好、高校的地理位置、排名、专业的就业前景等。3. **推荐逻辑**:根据用户的分数和专业偏好,结合历史录取数据,使用简单的算法来推荐可能录取的高校和专业。

coder_wwwdy的博客 1978

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

Android ListView加载多item布局及性能优化

在开发过程中,遇到一些比较旧的项目,请求网络数据时,接口返回一长串的JSON字符串,其中包括各种不相关的数据。而我们又需要把这些数据一一对应写在同一个界面上,又需要分别展示在不同的布局上,这时候就需要用到ListView

Sahara_Savage 7187

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 379

Android之ListView包含多种类型的Item

一般情况下,ListView中的Item的类型的都是相同的,即每个Item的布局都调用的同一个XML。但是我们现在的需求需要ListView包含多种类型,需要如何实现呢? 是的,就是覆写Adapter的getItemViewType(int position)和get ViewTypeCount()方法。 getItemViewType(int position)代表第position个Ite

my9074的专栏 2097

codemirror6 制作markdown编辑器(源码模式)

总体上感觉能用,但是不怎么友好,官方文档有点散乱,而且关键字高亮功能是独立出去的,去官方文档找半天,也没找到怎么改。EditorView.theme可以往EditorView模块中修改CSS的样式,从而影响编辑器的样式展示。"### 测试\n\n```javascript\nlet x = 'y'\n```"这个插件中的markdown语法的高亮样式。//这里指定markdown中代码块使用的解析扩展。开头的class样式,并且还需要在选择器前面添加。//markdown语言解析扩展。

qq_43203949的博客 1783

SAP 公司间采购简介

SAP公司间采购(Intercompany Procurement)是指企业集团内部不同法人实体之间的采购和销售流程。这种流程在跨国公司或有多个独立运营子公司的企业中非常常见。SAP提供了标准的功能来处理公司间采购,确保财务和物流流程的透明性和效率。以下是SAP公司间采购的基本流程及其相关模块的简介。

我小时候很黑的博客 1378

android listview 选择多个item,覆盖Android ListView onItemClick导致选择项目(选中)

我正在努力更好地理解ListView的内部功能,因为它涉及选择一个或多个项目 – 实际上令人惊讶的是,在我的理解中,这对我来说是多么困难.默认情况下,定期单击ListView项目会将该项目的“已检查”状态设置为true.如何覆盖此行为,以便不会发生此选择?更基本的是,这里的基础ListView机制是什么?行视图的默认值是onClick然后调用ListView的onItemClick / LongC...

weixin_31832681的博客 281

【QCA6174】QCA6174 DFS认证的时候会有概率信道不会跳转的情况,通常跳转成功概率只有25%问题分析及解决方案

Master设备需要测试的项目。

wgl307293845的博客 752

ListView实现不同的Item布局

点击免费下载源码 点击github下载 ListView是很多应用少不了的,有些应用的要求较为复杂,不是ListView嵌套GridView就是ListVIew嵌套ListVIew。更有甚者是两者都含有,而且还有其他不同形式的布局。 本人写了一个以前公司要求实现的布局如下图所示 左边其实是一个时间轴的效果,由于时间轴线的颜色太淡没有显示出来。为了实现这个功能当初是下了很多的功夫,也上网搜

刘永祥的专栏 3748

华为OD机试真题 新系统 2026-04-22 C++ 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 168

5G 模组 FM650 USB模式查询及网络配置

完成以上配置后,5G模组可进行搜网,入网成功后,上位机获取 5G IP。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1323

ListView Item 多布局的实现

Android ListView 多布局实现摘要 ListView 多布局允许在列表中显示不同类型的项目视图,适用于聊天、商品列表等场景。实现要点: 核心方法: getViewTypeCount() 返回布局类型数量 getItemViewType() 指定每项的布局类型 getView() 根据类型绑定对应布局 实现步骤: 定义数据模型(区分不同类型) 创建多种布局XML文件 重写BaseAdapter方法 使用ViewHolder优化性能 典型应用: 文本+图片混合列表 聊天界面(文本/图片消息) 电商

likuoelie的博客 1042

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ListView Item多布局的实现

ListView多布局实现摘要 (150字内) Android中实现ListView多布局需重写BaseAdapter的3个关键方法: getViewTypeCount() - 返回布局类型总数 getItemViewType() - 根据数据返回对应布局类型标识 getView() - 按类型加载不同布局并绑定数据 典型场景: 聊天界面(文本/图片消息) 商品列表(不同商品样式) 实现步骤: 定义数据模型(含类型标识) 创建多种布局XML 在Adapter中动态判断类型 使用ViewHolder优化性能

m0_57545130的博客 800

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android listview 按钮样式,Android开发实现ListView点击item改变颜色功能示例

Android开发实现ListView点击item改变颜色功能示例本文实例讲述了Android开发实现ListView点击item改变颜色功能。分享给大家供大家参考,具体如下:一、先看看效果图:二、实现步骤:1. xml布局android:id="@+id/left_listview"android:layout_width="match_parent"android:layout_height=...

weixin_33427833的博客 1318

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 复杂条目布局,android中listview的item显示不同的布局

android开发中,listview的item中显示不同的布局,即每一个item中的布局是不一样的。1、继承BaseAdapter类,除了其他一些必须重现的方法之外,还需要重写getViewTypeCount和getItemViewType这两个方法。其中getViewTypeCount方法返回listview中的布局个数,getItemViewType方法返回每一个item中布局的标志。最后在...

weixin_39796868的博客 363

ListView实现加载不同Item布局

ListView实现加载不同Item布局? 大家好,今天总结一片ListView加载不同Item布局的博客,在Android的app开发当中ListView貌似是基本配置,一般我们的ListView主要是作为列表类型的数据展示,普通的展示数据很好做,无非就是利用Volley、Xutils等等框架请求,然后Gosn或其他的解析,ImageLoader加载并显示图片,其实今天也用这些但是要做一些处理,...

awodefengduanwu的博客 308

仿QQ聊天-listView的item多布局

仿QQ聊天界面以及聊天气泡。.9图片制作以及黑边处理。

lhp15575865420的博客 2013

Android入门教程四十一之ListView Item多布局的实现

本节是ListView这个小节的最后一节,给大家带来的是ListView多布局Item的实现, 何为ListView Item多布局,打个比方,QQ这种聊天列表:假如他是用一个ListView做的,那么一个ListView上不就有两种不同的Item咯! 一左一右,嘿嘿,本节就来教大家如何实现ListView的多布局!1.要点讲解:重写getItemViewType()方法对应View是哪个类别,以及

无名 556

Viewpager中嵌套Listview,而且Listview的item中夹杂ViewPager

//现在有一个需求,需要在一个ViewPager的几个页面用listview显示,而且listview的item种类>=2,其中还有viewpager那么盖怎么实现呢,废话不多说,先把ViewPager架子搭起来 MainActivity.java public class MainActivity extends Activity { private ViewPa

Hanks软件库 8109

Android--ListView的item水平滑动效果

ListView的item水平滑动效果 --------------------------------------------------------------------- 步骤: 1、自定义Item布局view 1、自定义布局中有至少两个view要显示:一个正常显示的布局contentView,一个隐藏起来的布局menuView 2、自定义布局中,设置两个布局的位置,

Navan 3929
上一篇: 修改ActivityStudio项目名
下一篇: Activity向Fragment中传值
Developer_Sir
博客等级 码龄9年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值