Jude95 / EasyRecyclerView

ArrayAdapter,pull to refresh,auto load more,Header/Footer,EmptyView,ProgressView,ErrorView
2.03k stars 459 forks source link

添加head后列表的点击出现问题 #158

Open chengzhijun0706 opened 7 years ago

chengzhijun0706 commented 7 years ago

image 我在adapter中设置了item中的一个imageview的点击事件,但是当我添加headview后,点击事件还可以响应,但是界面却不刷新了

chengzhijun0706 commented 7 years ago

问题解决了,但是有些不明白,解决的方法是讲原来的notifyItemChanged(position);替换为notifyDataSetChanged();就可以了 image

Jude95 commented 7 years ago

首先,你不能直接操作Adapter的数据。所以getAllData().SetXXXX是完全无意义的操作。 另外,你修改了info的数据,你notifyItemChanged(position)是正确的,但你的position要加上header的数量,所以并不建议使用notifyItemChanged。 建议使用adapter.update(info,position)。专门用于处理单个数据更新的情况。

chengzhijun0706 commented 7 years ago

如果有一个item中的点击事件需要去改变info的数据(类似于点赞的情况),这样的需求如何去最优的处理方式呢

Jude95 commented 7 years ago

...上面不都说了建议

chengzhijun0706 commented 7 years ago

那按照最合理的方式,在viewholder中进行点击事件的处理,意思是在viewholder中获取adapter的实例进行update方法是么?

Jude95 commented 7 years ago

前面是针对你们常在viewholder外部写item监听器的写法。。我是一般都不这么写。 本来也建议在viewholder内部setdata里写监听,监听里直接修改info数据且修改view。耦合度低,效率也较高(因为你notifyitemchange会重新设置item的所有view,这样只会修改需要变动的view)。岂不美哉。 方式很多。别被这些封装逻辑搞晕了...本质就是修改view同时注意下recyclerview回收机制与ArrayAdapter数据管理。怎么写都好。