这是在帮某厂商做DVB+IP的机顶盒中遇到的问题

界面中总共有四列(也就是四个ListView),需求要求对于选中的Listview中的Item有高亮的背景以及文本字体变成深蓝色,失去焦点但是被 选中的Item的文本的颜色显示深蓝色,其它时候显示白色

开发中遇到的问题有:

1:Item高亮的背景不对,有时候Item是被选中了但是就是没高亮,这种效果的做法有两种思路一是利用Listview的listSelector属性指定一个Selector的资源文件,另外一种是在Item的根View上指定一个Background属性为一个Selector的资源文件,由于此Item的文本中还有TextView的颜色变化 因此我采用了第二种做法,另外TextView的颜色变化一开始我也是按照网上说的给TextView的TextColor属性指定一个Selector的资源文件,但是貌似在Android5.0上这个属性是不支持的,因此最后将TextView的颜色的变化在根View的onFoucusChange()事件中实现了,可重点问题是高亮的背景依然是紊乱的,最后网上百度了很久才知道setItemsCanFocus(true)属性,这个属性设置以后Listview的Item才是能获取焦点的然后将Item的焦点传递到根View 于是背景高亮的问题才正常

2:Listview的Item失去焦点以后引起ListView的滚动,ListView的Item获取焦点的时候也引起了滚动,另外在Listview设置选中的焦点的Item的时候 Item会找错,也就是不是上次获取焦点的那个Item

Listview有 transcriptMode属性,将该属性设置为disable即可避免自动滚动,另外直接调用setSelection(int position)方法也会引起滚动,查了下源码这个方法内部调用的是setSelectionFromTop(int position,int top)而且第二个参数传递的是定值0,因此每次调用该方法时Item永远是滑动到可见视图的第一项,最后就直接调用setSelectionFromTop()方法并且将上次选中位置的top记录下来 下次获取焦点的时候传入该参数就解决了问题;然后需要说明一点的是getChildAt() 方法不能直接使用,特别是当Item很多时获取到的选中的Item往往不准确,因为Listview的Item会及时回收!需要减去getFirstVisiblePosition()这样获取的才准确

3:ListView 的Item中默认第一个的时候有一个选中的样式文本的也颜色是深蓝色,因此我是在Adapter的GetView()的方法中做的判断当position=0的时候给TextView添加的文本颜色,但是调试过程中发现 position=0的时候会执行多次,导致了默认的样式紊乱,后来在调试中发现刷新数据的时候调用NotifyDataSetChanged()方法后默认样式最容易紊乱,于是每次刷新数据我就new了一个Adapter,减少了紊乱的情况,但还是偶尔会出现紊乱的情况,网上百度了下解决方案 大部分说是在GetView()的方法中判断container.getChildCount()==position 的里面再去判断position 但是亲测还是无效,现在也无法解决这个问题,如果有网友知道怎么解决 还请留言我,非常感谢~~

4:最后一列节目列表的Listview时 要求里面的TextView有跑马灯的效果(只是选中的Item其它状态的不需要滚动),但是当Listview中Item的文本都超过文本长度时 跑马灯就失效了,而且也不能触发Click事件了,但是item有长文本和短文本一起时跑马灯是可以滚动的,网上百度了一些解决方案都说自定义一个TextView让getFocused()方法始终返回为true,再一个就是在Adapter的GetView()方法中判断当根View获取焦点时让TextView的SetSelection为true,其实我采用的是第二种方案,但还是出现了上面的问题(另外第一种是不满足需求的),这个问题现在也没有解决,如果网友知道解决方法,也可以留言我,非常感谢~~

另外一点需要说下,其实当时做这个界面的时候,也考虑过用RecycleView去替换ListView,但是需求中有个要求,需要每一列能翻页,当时使用RecycleView的时候就是这个翻页支持不太好,才使用了现在的Listview,ListView内置是支持翻页的,有兴趣可以翻下源码

TV开发中ListView的那些坑相关推荐

  1. iOS开发中 经常遇到的坑,看我就够了! 韩俊强的博客

    从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦.在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解 ...

  2. 时间转换竟多出1年!Java开发中的20个坑你遇到过几个?

    前言 最近看了极客时间的<Java业务开发常见错误100例>,再结合平时踩的一些代码坑,写写总结,希望对大家有帮助,感谢阅读~ 1. 六类典型空指针问题 包装类型的空指针问题 级联调用的空 ...

  3. Android开发中需要注意的坑

    背景 此文纯粹总结开发Android以来遇到的一些坑,一来为了防止再次掉坑,二来是希望后面的朋友能躲开这些坑.另外还编写了< Android开发中常犯的错误>. 包名重复问题 由于Goog ...

  4. 谈谈我在敏捷开发中遇到的那些坑

    01 前言 Agile--敏捷开发,作为CMM神话崩溃后被引入的一套新的软件开发模式,这几年来被广泛引起关注,并被寄予厚望.敏捷开发在其他业界的应用是否理想不得而知,但以下总结了我所在公司的敏捷开发试 ...

  5. ThinkPHP开发中遇到的小坑

    TP不得不说是现在来说最好用的框架了,但是也不能不承认它还是有一些小坑需要填了. 1.坑爹的字段缓存机制 thinkphp为了高效的读取数据库,更快的打开网页,加入了字段缓存这个机制,其实来说是挺好的 ...

  6. Spring 声明式事务在业务开发中容易碰到的坑总结

    Spring 声明式事务,在业务开发使用上可能遇到的三类坑,包括: 第一,因为配置不正确,导致方法上的事务没生效.我们务必确认调用 @Transactional 注解标记的方法是 public 的,并 ...

  7. Android开发中ListView多屏的全选、反选功能

    [size=medium] 鄙人最近刚开始学习Android,在练习的时候写到一个ListView的全选反选功能.本来以为这个功能很简单,随随便便就能搞定,结果真的下手去做的时候被虐的死去活来,不知道 ...

  8. android 中自定义安装,Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的: •需要展示的数据集List •为这个数据集编写一个ListView •为这个ListView编写一个Adapter,一般继承自BaseAda ...

  9. android 多进程 坑,Android 开发中踩过的坑之八:多进程问题

    这是个需要细心处理的坑. 1 内存: 在manifest中可以对各个组件声明其所在的进程: android:process=":name" 然后对应的Acitivity, Rece ...

最新文章

  1. Flink中GroupWindow和OverWindow各自的作用+window体系+文档阅读方式
  2. 《SEO的艺术(原书第2版)》——第1章 搜索:反映认知、连接商务
  3. mysql where条件使用了or会不会扫全表
  4. infor wms 中英文对照_为什么要wms?_wms吧
  5. 第10讲 | 深入区块链技术(二):P2P网络
  6. 【机器人】项目疑难杂症
  7. Oracle查询时15分钟划分
  8. DPDK - TX-Offload Checksum
  9. python报表自动化系列 - 获得指定目录下所有文件名
  10. python的flask前端显示图片_Python flask框架如何显示图像到web页面
  11. 穷举法 解决用3个水桶等分8升水 python实现
  12. 怎么提取PDF页面,PDF页面提取的操作步骤
  13. 上海落户计算机水平毕业研究生,2021应届生落户上海打分标准,部分毕业生可直接落户上海...
  14. 计算机为什么无法访问公司共享文件夹,win10系统共享文件夹无法访问的详细方案...
  15. [篇二章七]_安装卸载 VMware Tools
  16. HTTP Content-type 对照表
  17. Android开发:Android studio开发中引用图片资源(图解)
  18. #云栖大会# 移动安全专场——APP渠道推广作弊攻防那些事儿(演讲速记)
  19. mysql支持kv_阿里云推出兼容Redis的KV数据库 有三大优势
  20. 第三篇 第七章气体灭火系统(三)

热门文章

  1. linux 安装dwm界面,debian安装dwm窗口管理器
  2. 如何配置Office 365通过SecurityGateway路由出站邮件
  3. 做一块真正的放心好屏:品胜全新手机屏幕总成
  4. 宇鑫互联晋级2013“创业之星”大赛深圳赛区半决赛
  5. mysql乱码的问题_MySQL中出现乱码问题的终极解决宝典
  6. 3dmax 虚拟化 服务器版本,VRPlatform中文官方版
  7. 图数据技术护航网络安全 - Neo4j 大中华区总经理 方俊强
  8. 基于SSM网上二手书城
  9. 计算机主机开机为什么显示器不开,电脑开机显示器不显示?教你如何快速判断是显示器还是主机问题!...
  10. 第一篇WP:攻防世界MISC 功夫再高也怕菜刀)