ExpandableText icon indicating copy to clipboard operation
ExpandableText copied to clipboard

调用mAdapter.notifyDataSetChanged()方法新数据后,状态未变

Open xiaxiayang opened this issue 7 years ago • 3 comments

当刷新数据,数据源改变后,调用mAdapter.notifyDataSetChanged()方法,此时adapter中SparseArray<Integer> mTextStateList中记录的数据并未发生改变,然后执行判断时,如果刷新前position位置上的状态是什么样的,现在改position位置上的状态就是什么样的,造成显示不正确。 我的解决办法是,在adapter中写一个方法 public void clearStateList(){ mTextStateList.clear(); } 然后在调用mAdapter.notifyDataSetChanged()之前,调用这个方法,先清除状态值。 如果有更好的解决办法,欢迎交流,谢谢!

xiaxiayang avatar Sep 25 '17 14:09 xiaxiayang

当初只是写一个demo,没有考虑太多,真是抱歉。 已经把相关代码抽出到BaseAdapter并修改储存state的key为用户自定义的唯一标示ID(之前是position)。 增加了你提出的clearStateList()方法,是个很好的建议,应对列表数据可能的动态变化。 @xiaxiayang

jerryion avatar Sep 27 '17 11:09 jerryion

给了很大的帮助,谢谢

xiaxiayang avatar Sep 29 '17 08:09 xiaxiayang

当初只是写一个demo,没有考虑太多,真是抱歉。 已经把相关代码抽出到BaseAdapter并修改储存state的key为用户自定义的唯一标示ID(之前是position)。 增加了你提出的clearStateList()方法,是个很好的建议,应对列表数据可能的动态变化。 @xiaxiayang

增加这个方法是可以正常展示了,但是如果更新item内容,比如我的item里有点赞按钮,需要刷新按钮状态,这时候调用notifyDataSetChanged屏幕就会闪烁,因为每次记录的状态都被清空了,这种情况怎么解决呢?

feng1991G avatar Jul 25 '19 18:07 feng1991G