2015-11-07 23 views
0

我有RecyclerViewListView)。每个列表项(行)都有上传/下载按钮。当用户按下按钮时,它必须从亚马逊上传或下载文件。来自回收商视图列表项的异步呼叫

上传或下载过程正在使用Kotlin Fuel框架完成。 Fuel是一个异步框架。一旦上传或下载过程完成,我就写了一个回调来访问RecyclerView适配器。现在,我必须改变按钮(例如,如果按钮是上传的,在用户点击之后,它必须上传,一旦上传完成,它应该将其改变为下载按钮)。一旦调用回调方法,我搜索列表(我传递给列表视图)以查找RecyclerView中列表项的位置。

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

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

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

回答

0

您不应该尝试直接访问ViewHolder

RecyclerView使用一个可重用其可见的项目视图一个轻量级的模式(而不是创造的适配器,它会表现不佳,浪费存储每一个项目视图。)

相反,操纵你的模型适合您所在的下载状态,然后致电notifyItemChanged(position),这反过来会导致您的RecyclerView致电onBindViewHolder代表您更新该项目。

您只需确保您的onBindViewHolder方法具有逻辑即可在您的模型中查找下载状态以了解要执行的操作。

+0

当然会尝试它,并接受答案,一旦它的工作.. – User