在 Android 中,我正在开发一个库来简化 RecyclerView
的实现。我还希望,一旦开发人员将此库添加为 app build.gradle
中的依赖项,就应该在 app build.gradle
中添加 RecyclerView
依赖项不需要。该库基本上就像 RecyclerView
上的包装器。
我通过在库中动态膨胀 RecyclerView
来处理 View 部分。对于 LayoutManager,我创建了一个基于工厂设计模式的类,开发人员可以在其中选择他想要的 LayoutManager 和配置。但我在实现 Adapter 和 ViewHolder 包装类时遇到了问题。
尝试#1
open class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
错误:缺少 super 类型依赖项(这意味着 RecyclerView
依赖项需要存在于 app build.gradle
中)
尝试#2
class ViewHolder(view: View)
无论我在库内部使用它,我都尝试将其显式命名为 viewHolder as ViewHolder
或者
适配器为 RecyclerView.Adapter
错误:此转换永远不会成功。
请指导我,如何在 RecyclerView
上实现 100% 包装?
最佳答案
您的库可能依赖于具有以下行的 RecyclerView 库:
implementation "com.android.support:recyclerview-v7:$version"
通过使用实现,您不会将此依赖项公开给依赖于您的库的模块。因此,ViewHolder 类的用户将不知道 RecyclerView.ViewHolder 类,从而导致所描述的错误。
尝试使用 api 在模块链中传播此依赖关系:
api "com.android.support:recyclerview-v7:$version"
<小时/>
更新:您可以创建一个包装类并使用内部可见性隐藏属性:
open class ViewHolder(view: View) {
internal val recyclerHolder = RecyclerView.ViewHolder(view)
}
这与解决方案 #2 类似,但您不使用强制转换为 RecyclerView.ViewHolder,而是使用该属性。
关于java - 在 Kotlin 中显式转换 Android 的 RecyclerView 的 ViewHolder 时出错 : 'This cast can never succeed' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670164/