henryblue / TvRecyclerView

A custom RecyclerView for Android TV end
Apache License 2.0
7 stars 4 forks source link

notifyDataSetChanged焦点丢失 #26

Closed sunxu3074 closed 5 years ago

sunxu3074 commented 5 years ago
henryblue commented 5 years ago

这些是基本功能, 不知道你是如何使用的, 应该不会有问题

sunxu3074 commented 5 years ago

尝试调用 mAdapter.notifyItemChanged(position); ,但item后会显示一个原始大小的item与放大的并存,滚动时原始的会不动放在图层的最后边。

henryblue commented 5 years ago

这样就清楚了, 我最近会看一下

sunxu3074 commented 5 years ago

好滴 谢谢 💂

henryblue commented 5 years ago

mAdapter.notifyItemChanged(position); 这句是起作用, 没有问题, 焦点也没问题(都是在原先选中的位置)不管焦点是否在需要改变的item上都没有问题,你看一下你用的是否有问题

sunxu3074 commented 5 years ago

446031540794100_ pic 446041540794128_ pic

sunxu3074 commented 5 years ago
henryblue commented 5 years ago

这并不是mAdapter.notifyItemChanged(position)的问题, 如果你看源码了解默认焦点框的实现逻辑,就知道这是焦点框逻辑导致的问题, 为了方便放大选中与管理焦点框, 焦点框是单独处理并位于单独的图层, 换句话说就是在recyclerview上画一个焦点框,这样就会导致一个问题, 如果item背景是透明的,那么就会导致这个问题, 焦点框与下面的item重叠(就是透过焦点框看到下面的item), 这并不是一个问题。 与实现逻辑有关, 有两种解决方案:

  1. 将itemView设置一个背景(如果可以), 可以解决这个问题
  2. 使用第二种模式(不是默认的模式)将isAutoProcessFocus设置false(就是将焦点给子view来处理), 自己自定义一个itemView来去实现放大缩小动画(或画焦点框), 具体可以参考例子 https://github.com/henryblue/TvRecyclerView/blob/master/app/src/main/java/com/app/tvrecyclerview/maulCarouselActivity.java https://github.com/henryblue/TvRecyclerView/blob/master/app/src/main/java/com/app/tvrecyclerview/view/FocusRelativeLayout.java
sunxu3074 commented 5 years ago

试了上面的都不管用,这个和#10 是一样的问题。如果有时间我加你qq吧,麻烦了