在Android中,我正在研究一个简化RecyclerView
实现的库。我还希望一旦开发人员在app build.gradle
中将此库添加为依赖项,就不需要在RecyclerView
中添加app build.gradle
依赖项。该库基本上就像是RecyclerView
上的包装器。
我通过在库中动态填充RecyclerView
来处理视图部分。对于LayoutManager
,我创建了一个基于Factory Design Pattern的类,开发人员可以在其中选择所需的LayoutManager
和配置。但是在实现Adapter
和ViewHolder
包装类时,我遇到了一个问题。
尝试#1
open class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
错误:缺少超级类型依赖项(这意味着RecyclerView
中必须存在app build.gradle
依赖项)
尝试#2
class ViewHolder(view: View)
无论我在库中内部使用它的什么地方,我都尝试将其显式地封装为viewHolder as ViewHolder
要么
adapter as RecyclerView.Adapter
错误:此强制转换永远不会成功。
请对此进行指导,如何在RecyclerView
上实现100%包装?
答案 0 :(得分:1)
您的库大概依赖于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的属性。
答案 1 :(得分:0)
尝试用这种方法制作viewholder类。
class ItemViewHolder : RecyclerView.ViewHolder {
constructor(itemView: View) : super(itemView){}
}