[英]Error while explicitly casting Android's RecyclerView's ViewHolder in Kotlin: 'This cast can never succeed'
在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
viewHolder as ViewHolder
adapter as 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。
嘗試這種方式進入make viewholder類。
class ItemViewHolder : RecyclerView.ViewHolder {
constructor(itemView: View) : super(itemView){}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.