Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显式强制转换Android'时出错;s RecyclerView';Kotlin的s视图持有者:';这个角色永远不会成功';_Java_Android_Kotlin_Android Recyclerview - Fatal编程技术网

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内部属性的包装器。请参阅更新的答案