先看下效果:

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)相关推荐

  1. 用exp无法导出空表解决方法/用exp导出数据时表丢失原因

    用exp无法导出空表解决方法/用exp导出数据时表丢失原因 最早的一次使用oracle 11g导出数据发现有的表丢失了,感觉莫名其妙的,后来终于找到原因了. 找到问题以后,再看看解决方案. 11GR2 ...

  2. oracle更新数据没反应,ORACLE更新数据时如果有就更新没有就插入

    SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...

  3. mysql并发_MySQL并发更新数据时的处理方法

    UPDATE是否会加锁? SQL语句为如下时,是否会加锁? UPDATE table1 SET num = num + 1 WHERE id=1; 答案是不会 实际上MySQL是支持给数据行加锁(In ...

  4. Spark SQL读取Oracle的number类型的数据时精度丢失问题

    Spark SQL读取Oracle的number类型的数据时精度丢失问题 在程序开发中,使用到了sparkSQL读取Oracle数据库,发现当sparkSQL读取Oracle的number类型字段时, ...

  5. android phpmyadmin,从android studio向phpmyadmin添加数据时出现问题

    我是安卓的初学者. 但是我在将android studio中的数据添加到phpMyAdmin时遇到了问题. 我找到了一个准备好的代码,但是由于某种原因,当我点击按钮时,应用程序崩溃了. 我认为问题出在 ...

  6. html表格内容自动更新,ElementUI table 组件展开 expand,动态更新数据时,视图没有自动更新...

    这是因为在给table的数据赋值时,展开的视图对应的字段不存在.(动态增加属性) 拿到table数据后,先把展开字段初始化,然后再赋值,问题就解决了~~ 比如,之前是:this.list = api. ...

  7. 更新数据时redis缓存与数据库数据不一致的问题

    最初级的缓存不一致问题及解决方案 问题:先修改数据库,再删除缓存.如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致. 解决思路:先删除缓存,再修改数据库.如果数据库修 ...

  8. 向mysql表中插入/更新数据时自动添加创建时间/更新时间

    目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...

  9. 更新数据时,MySQL的聚簇索引是如何变化的?

    文章已收录在我的 GitHub 仓库,欢迎Star/fork: Java-Interview-Tutorial 听说点赞.评论.收藏的人长得都很好看哦. 搜索一个主键id对应的行,先去顶层的索引页88 ...

  10. Redis - 更新数据时如何保证MySQL和Redis中的数据一致性?

    文章目录 01.如何理解数据的一致性? 02.使用redis缓存的注意事项? 03.如何更新缓存? 04.组合1:先更新缓存,再更新数据库(双写模式,不推荐) 05.组合2:先删除缓存,再更新数据库( ...

最新文章

  1. 近期活动盘点:大数据应用中日交流论坛、几位专家带你认识Flink、青年自强AI计划 CV免费公开课!(11.12-11.23)...
  2. 在单元测试时指定HttpContext的各种Path
  3. 部队人员官兵请假管理系统
  4. 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序
  5. Django startproject的问题
  6. node简单实现一个更改头像功能
  7. verilog 中的 timescale
  8. Traffic Simulator Applet(交通模拟器小程序)
  9. sqlite3数据库最大可以是多大?可以存放多少数据?读写性能怎么样?详述
  10. idea插件开发(01)---最简单的helloworld版,不需要知道原理,先跟我做一个最简单的弹框插件
  11. Mongodb源码分析--Mongos之分布式锁
  12. 【金万维】天联高级版客户端打开U8报错:未监听端口
  13. 正弦定理c语言,正弦定理练习题
  14. CRT查看日志中文乱码问题
  15. 内存稳定性测试软件(MemTest)
  16. c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...
  17. python webpy启动服务
  18. Android开发一个美食app
  19. 禅道项目管理,带你避开项目管理中的那些坑
  20. Python在振动信号处理中的应用(五):振动加速度信号转换为速度或位移信号

热门文章

  1. 高中时代的黑历史产物
  2. C#与Halcon联合编程之如何使Halcon窗口显示的图片适应窗口控件的大小
  3. 用phpexcel导入导出文件
  4. xp系统禁用wmi服务器,windows xp系统启用WMI服务的方法
  5. 微信小程序设计稿pt怎么转rpx
  6. 通过使用第三方开源jar包sigar.jar我们可以获得本地的信息
  7. html图表插入ppt
  8. 群晖7.X关闭双重验证(OTP)的方法
  9. Hibernate 缓存机制浅析
  10. 设计模式总览及工厂模式详解