来自回收站视图的列表项的异步调用
我有一个RecyclerView
( ListView
)。 每个列表项(行)都有上传/下载按钮。 当用户按下按钮时,它必须上传或从亚马逊下载文件。
上传或下载过程正在使用Kotlin Fuel
框架完成。 Fuel是一个异步框架。 一旦上传或下载过程完成,我就写回调来RecyclerView
适配器。
现在,我必须改变按钮(例如,如果按钮是上传的,在用户点击之后,它必须上传,一旦上传完成,它应该改变为下载按钮)。 我搜索列表(我传递给列表视图),一旦调用回调方法,在RecyclerView
查找列表项的位置。
但是我不知道如何让View Holder
更新从上传到下载或下载上传的按钮。 我试过,一旦识别行,就调用notifyDataSetChanged
。 但它的行为如此不同,以至于RecyclerView
的第一页。 notifyDataSetChanged
后根本不显示上传/下载按钮。
我应该调用notifyItemChanged(position)
以便它调用bindViewHolder()
,它具有逻辑显示下载按钮,如果文件不存在,否则上传按钮。
或者还有其他更好的方法来做到这一点。 我在单独的文件中定义了FUEL调用,以实现可重用性。
您不应该尝试直接访问ViewHolder
。
RecyclerView
使用一个flyweight模式,为其可见项目重用Views(而不是为适配器中的每个项目创建一个视图,而这些视图执行效果不佳,浪费内存)。
相反,根据您所处的下载状态适当地操作您的模型,然后调用notifyItemChanged(position)
,这反过来会导致您的RecyclerView
调用onBindViewHolder
以您的名义更新项目。
你只需要确保你的onBindViewHolder
方法有逻辑就可以在你的模型中查找下载状态来知道该怎么做。