来自回收站视图

时间:2015-11-07 07:18:18

标签: android android-recyclerview

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

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

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

但我不知道如何抓住View Holder来更新按钮,从上传到下载或下载到上传。我试过,一旦确定了行,就打电话给notifyDataSetChanged。但它的行为却如此不同,那就是RecyclerView的第一页。在notifyDataSetChanged之后,它根本不显示上传/下载按钮。

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

或者还有其他更好的方法吗?我在单独的文件中定义了FUEL调用以启用可重用性。

1 个答案:

答案 0 :(得分:0)

您不应该尝试直接访问ViewHolder

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

相反,请根据您所处的下载状态操纵您的模型,然后拨打notifyItemChanged(position),这会导致RecyclerView致电onBindViewHolder更新您的项目代表。

您只需要确保您的onBindViewHolder方法中包含逻辑,以便在模型中查找下载状态以了解要执行的操作。