来自回收站视图的列表项的异步调用

我有一个RecyclerViewListView )。 每个列表项(行)都有上传/下载按钮。 当用户按下按钮时,它必须上传或从亚马逊下载文件。

上传或下载过程正在使用Kotlin Fuel框架完成。 Fuel是一个异步框架。 一旦上传或下载过程完成,我就写回调来RecyclerView适配器。

现在,我必须改变按钮(例如,如果按钮是上传的,在用户点击之后,它必须上传,一旦上传完成,它应该改变为下载按钮)。 我搜索列表(我传递给列表视图),一旦调用回调方法,在RecyclerView查找列表项的位置。

但是我不知道如何让View Holder更新从上传到下载或下载上传的按钮。 我试过,一旦识别行,就调用notifyDataSetChanged 。 但它的行为如此不同,以至于RecyclerView的第一页。 notifyDataSetChanged后根本不显示上传/下载按钮。

我应该调用notifyItemChanged(position)以便它调用bindViewHolder() ,它具有逻辑显示下载按钮,如果文件不存在,否则上传按钮。

或者还有其他更好的方法来做到这一点。 我在单独的文件中定义了FUEL调用,以实现可重用性。

您不应该尝试直接访问ViewHolder

RecyclerView使用一个flyweight模式,为其可见项目重用Views(而不是为适配器中的每个项目创建一个视图,而这些视图执行效果不佳,浪费内存)。

相反,根据您所处的下载状态适当地操作您的模型,然后调用notifyItemChanged(position) ,这反过来会导致您的RecyclerView调用onBindViewHolder以您的名义更新项目。

你只需要确保你的onBindViewHolder方法有逻辑就可以在你的模型中查找下载状态来知道该怎么做。