android 焦点丢失,RecyclerView更新数据时焦点丢失(android bug)
先看下效果:
device-2018-03-07-154357.gif
做车机项目时,需要动态更新WIFI信息,WIFI列表增加焦点控制
开发中遇到两个问题
RecyclerView抢占了item的焦点,导致不显示红色框框
RecyclerView刷新数据时焦点丢失
(刷新前焦点位置比刷新后大于刷新后的数据大小,这样系统就会去找layout中可以获取的焦点的控件,可能不会是recyclerview,这时焦点就会消失掉;反之,则会在recyclerview的第一个位置)
先解决第一个问题:
第一步
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yftech.myapplication.MainActivity"
android:background="#000"
android:orientation="vertical">
android:id="@+id/recy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
##表示当子控件不需要focus的时候,recyclerview才会去获取focus
android:descendantFocusability="afterDescendants"
/>
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="刷新数据"/>
第二步
android:id="@+id/item"
##必须设置
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector">
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="@dimen/text_item_height"
android:textColor="@android:color/white"
android:gravity="left|center_vertical"
android:textSize="@dimen/item_text_size"
android:height="65dp"
android:paddingLeft="30dp"
##指的是当前控件是否跟随父控件的(点击、焦点等)状态
android:duplicateParentState="true"
/>
搞定第一个问题!!!
重点解决第二个问题
1.adapter的setHasStableIds设置成true
adapter.setHasStableIds(true);
解释:设置item是否可以有一个id(具体意思可以百度)
2.重写adapter的getItemId方法
@Override
public long getItemId(int position) {
return position;
}
解释:给item生成一个id,用于定位焦点的
3.这两步已经可以保存recyclerview的焦点了,但是使用notify系列方法仍然会出现focus丢失的问题,现在官方已经承认这是一个bug,可以暂时使用禁用notifyDataSetChanged动画的方法来规避:
mRecyclerView.setItemAnimator(null);
搞定
android 焦点丢失,RecyclerView更新数据时焦点丢失(android bug)相关推荐
- 用exp无法导出空表解决方法/用exp导出数据时表丢失原因
用exp无法导出空表解决方法/用exp导出数据时表丢失原因 最早的一次使用oracle 11g导出数据发现有的表丢失了,感觉莫名其妙的,后来终于找到原因了. 找到问题以后,再看看解决方案. 11GR2 ...
- oracle更新数据没反应,ORACLE更新数据时如果有就更新没有就插入
SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...
- mysql并发_MySQL并发更新数据时的处理方法
UPDATE是否会加锁? SQL语句为如下时,是否会加锁? UPDATE table1 SET num = num + 1 WHERE id=1; 答案是不会 实际上MySQL是支持给数据行加锁(In ...
- Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取Oracle的number类型的数据时精度丢失问题 在程序开发中,使用到了sparkSQL读取Oracle数据库,发现当sparkSQL读取Oracle的number类型字段时, ...
- android phpmyadmin,从android studio向phpmyadmin添加数据时出现问题
我是安卓的初学者. 但是我在将android studio中的数据添加到phpMyAdmin时遇到了问题. 我找到了一个准备好的代码,但是由于某种原因,当我点击按钮时,应用程序崩溃了. 我认为问题出在 ...
- html表格内容自动更新,ElementUI table 组件展开 expand,动态更新数据时,视图没有自动更新...
这是因为在给table的数据赋值时,展开的视图对应的字段不存在.(动态增加属性) 拿到table数据后,先把展开字段初始化,然后再赋值,问题就解决了~~ 比如,之前是:this.list = api. ...
- 更新数据时redis缓存与数据库数据不一致的问题
最初级的缓存不一致问题及解决方案 问题:先修改数据库,再删除缓存.如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致. 解决思路:先删除缓存,再修改数据库.如果数据库修 ...
- 向mysql表中插入/更新数据时自动添加创建时间/更新时间
目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...
- 更新数据时,MySQL的聚簇索引是如何变化的?
文章已收录在我的 GitHub 仓库,欢迎Star/fork: Java-Interview-Tutorial 听说点赞.评论.收藏的人长得都很好看哦. 搜索一个主键id对应的行,先去顶层的索引页88 ...
- Redis - 更新数据时如何保证MySQL和Redis中的数据一致性?
文章目录 01.如何理解数据的一致性? 02.使用redis缓存的注意事项? 03.如何更新缓存? 04.组合1:先更新缓存,再更新数据库(双写模式,不推荐) 05.组合2:先删除缓存,再更新数据库( ...
最新文章
- 近期活动盘点:大数据应用中日交流论坛、几位专家带你认识Flink、青年自强AI计划 CV免费公开课!(11.12-11.23)...
- 在单元测试时指定HttpContext的各种Path
- 部队人员官兵请假管理系统
- 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序
- Django startproject的问题
- node简单实现一个更改头像功能
- verilog 中的 timescale
- Traffic Simulator Applet(交通模拟器小程序)
- sqlite3数据库最大可以是多大?可以存放多少数据?读写性能怎么样?详述
- idea插件开发(01)---最简单的helloworld版,不需要知道原理,先跟我做一个最简单的弹框插件
- Mongodb源码分析--Mongos之分布式锁
- 【金万维】天联高级版客户端打开U8报错:未监听端口
- 正弦定理c语言,正弦定理练习题
- CRT查看日志中文乱码问题
- 内存稳定性测试软件(MemTest)
- c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...
- python webpy启动服务
- Android开发一个美食app
- 禅道项目管理,带你避开项目管理中的那些坑
- Python在振动信号处理中的应用(五):振动加速度信号转换为速度或位移信号