美文网首页
列表(RecyclerView)Item使用空布局的坑

列表(RecyclerView)Item使用空布局的坑

作者: z_ym | 来源:发表于2016-10-21 17:32 被阅读650次

    这两天在实现一个列表功能,列表的样式是类似微信公众号消息列表,数据分类显示,实现的逻辑也比较简单,只要将数据处理成List<List<XxxBean>>的形式即可,每个Item对应的layout布局是一个空的LinearLayout,然后使用该LinearLayout动态添加子控件(根据List<XxxBean>数据添加内容视图,子控件长度即为List的长度)。带着满心欢喜打开了app,效果不错,是自己想要的效果。

    当前数据长度为1,图示为一个Item的布局,但是当我下拉刷新(SwipieRefreshLayout)列表时,异常现象出现了。接口返回的数据长度依旧为1,通过notifyDataSetChanged()刷新适配器内容,这时界面上出现了两条数据!!!

    心想,这是什么鬼!!,当时瞬间蒙蔽,查了好久找不到原因,以为是数据问题,查了好几次,发现数据很正常。后来看到网上的文章说RecyclerView有缓存机制,清了缓存再试试?还是不行,这时已经花了我很长时间了,满头焦虑啊~~~

    没办法,只能继续一行代码一行代码找原因了,看到适配器时时,我突然感觉找到问题所在了,因为RecyclerView的Item的布局是一个LinearLayout,RecyclerView有强大的视图重用机制,当我调用notifyDataSetChanged时,原先Item的LinearLayout并未重新创建,而是引用了之前的LinearLayout,由于之前LinearLayout已经添加过子控件,并未清除,所以导致重复添加子控件的问题,于是在适配器里添加了一行代码——>(linearLayout.removeAllViews();)。重新运行,再也不会有重复显示的问题,果然是这个原因!

    其实是个很简单的问题,吃一堑长一智,遇到问题是好事,以后不会再犯错。

    希望对遇到相同问题的网友有所帮助!

    相关文章

      网友评论

          本文标题:列表(RecyclerView)Item使用空布局的坑

          本文链接:https://www.haomeiwen.com/subject/zrqrrttx.html