最近接到需求要实现一个班级选择的弹窗,这个在平时的APP中比较常见。自己实现的时候出现了一些问题,所以记录一下
首先给出效果图

下面说一下我遇到的一些问题
问题一:RecyclerView点击选择item之后,滑动RecyclerView item点击效果会消失,会出现其他item被选中的情况
这时候我想到了一个方法onViewAttachedToWindow(),这个方法是在item在recyclerView中可见的时候调用,所以可以在这个方法里面记录点击选择的位置
代码如下:(懒得用markdown了直接上图吧)

在这里我对未点击item选择班级,和已经点击item选择班级做了判断。
因为在这个方法执行之后会执行onBindViewHolder()所以这里只需做数据的改变即可
问题二:RecyclerView的Item单选
大家bing一下就能找到好多的解决方法,下面附上我参考别人写的解决方法

这里比较简单,通过接口的方式传入点击时的position 在对position和list里面的数据进行位置的判断,就知道当前点击的位置在哪里,然后再调用notifyDataSetChanged()进行刷新
下面是onBindViewHolder()的代码

大家可以看到最后一行代码,这是另外一个坑。当时我写完之后发现点击item,然后dialog跟着消失但是点击的item没有点击效果啊。研究之后我发现是dialog消失的时间太快了,item还没展示点击效果dialog就消失了,又或者是在dialog消失过程中才出现点击效果,这样肉眼是看不到的,所以后面就让dialog延迟消失,完美解决。至于以上这个问题,估计跟添加了判断和调用了notifyDataSetChanged() 导致了速度变慢吧跟不上dialog dimiss()的速度吧。
目前遇到了这两个问题,到时候有问题再更新哦