Java 显式强制转换Android'时出错;s RecyclerView';Kotlin的s视图持有者:';这个角色永远不会成功';
在安卓系统中,我正在开发一个库,使Java 显式强制转换Android'时出错;s RecyclerView';Kotlin的s视图持有者:';这个角色永远不会成功';,java,android,kotlin,android-recyclerview,Java,Android,Kotlin,Android Recyclerview,在安卓系统中,我正在开发一个库,使recyclererview的实现变得简单。我还希望,一旦开发人员在app build.gradle中将此库添加为依赖项,就不需要在app build.gradle中添加RecyclerView依赖项。这个库基本上就像RecyclerView上的包装器 我通过在库中动态地膨胀RecyclerView来处理视图部分。对于LayoutManager,我基于工厂设计模式创建了一个类,开发人员可以在其中选择所需的LayoutManager和配置。但是我在实现适配器和视图
recyclererview
的实现变得简单。我还希望,一旦开发人员在app build.gradle
中将此库添加为依赖项,就不需要在app build.gradle
中添加RecyclerView
依赖项。这个库基本上就像RecyclerView
上的包装器
我通过在库中动态地膨胀RecyclerView
来处理视图部分。对于LayoutManager
,我基于工厂设计模式创建了一个类,开发人员可以在其中选择所需的LayoutManager
和配置。但是我在实现适配器
和视图持有者
包装类时遇到了一个问题
尝试#1
open class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
错误:缺少超级类型依赖项(这意味着RecyclerView
依赖项需要存在于app build.gradle
)
尝试#2
class ViewHolder(view: View)
无论我在库中的哪个内部使用它,我都尝试将它显式地封装为viewHolder as viewHolder
或
适配器作为RecyclerView.adapter
错误:此强制转换永远不会成功
请指导我,如何在RecyclerView
上实现100%的包装?尝试以这种方式进入make viewholder类
class ItemViewHolder : RecyclerView.ViewHolder {
constructor(itemView: View) : super(itemView){}
}您的库可能依赖于具有以下行的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属性,而是RecyclerView.ViewHolder属性。感谢您提供了信息丰富的答案。但是,这就是交易。我希望我的lib类能够从根本上包装Android的RecyclerViews类。对于开发人员来说,它应该看起来像是在使用RecyclerView类的替代品。我可以发布完整的图书馆项目,以帮助更多。当前版本位于github.com/mumayank/airlocationRight,仍然不确定为什么要专门隐藏RecyclerView类,但可以继续使用实现依赖项,然后使用具有kotlin内部属性的包装器。请参阅更新的答案