kotlin中具有不同视图类型的Android recyclerview
我在Kotlin中创建了一个具有多种视图类型的RecyclerView(技术动态方法分派或运行时多态性), 现在我有了ViewHolder,如下图所示kotlin中具有不同视图类型的Android recyclerview,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我在Kotlin中创建了一个具有多种视图类型的RecyclerView(技术动态方法分派或运行时多态性), 现在我有了ViewHolder,如下图所示 abstract class BaseViewHolder<T> internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){ abstract fun bind(_object:T) } class activation_items_m
abstract class BaseViewHolder<T> internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
abstract fun bind(_object:T)
}
class activation_items_main_activity (list: List<out BaseModel>,context: Context):RecyclerView.Adapter<BaseViewHolder<*>>() {
private var mList: List<out BaseModel>? = null
private var mInflator:LayoutInflater ? = null
init {
this.mList = list
this.mInflator = LayoutInflater.from(context)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
when (viewType)
{
Constant_ViewType_RecyclerView.ViewType.ListOfActivation_Type1 -> return ListOfActivation_MainActivity_Holder(mInflator!!.inflate(R.layout.activities_layout_item,parent,false))
Constant_ViewType_RecyclerView.ViewType.ListOfActivation_Type2 -> return ListOfActivation_MainActivity2_Holder(mInflator!!.inflate(R.layout.activities_layout_items_type2,parent,false))
}
return null // -----> **problem return null**
}
override fun getItemCount(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getItemViewType(position: Int): Int {
return mList!![position].viewType
}
class ListOfActivation_MainActivity_Holder(itemView: View):BaseViewHolder<ListOfActivation_MainActivity>(itemView)
{
override fun bind(_object: ListOfActivation_MainActivity) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
class ListOfActivation_MainActivity2_Holder(itemView: View):BaseViewHolder<ListOfActivation2_MainActivity>(itemView)
{
override fun bind(_object: ListOfActivation2_MainActivity) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
抽象类BaseViewHolder内部构造函数(itemView:View):RecyclerView.ViewHolder(itemView){
抽象趣味绑定(_对象:T)
}
我有一个适配器,如下图所示
abstract class BaseViewHolder<T> internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
abstract fun bind(_object:T)
}
class activation_items_main_activity (list: List<out BaseModel>,context: Context):RecyclerView.Adapter<BaseViewHolder<*>>() {
private var mList: List<out BaseModel>? = null
private var mInflator:LayoutInflater ? = null
init {
this.mList = list
this.mInflator = LayoutInflater.from(context)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
when (viewType)
{
Constant_ViewType_RecyclerView.ViewType.ListOfActivation_Type1 -> return ListOfActivation_MainActivity_Holder(mInflator!!.inflate(R.layout.activities_layout_item,parent,false))
Constant_ViewType_RecyclerView.ViewType.ListOfActivation_Type2 -> return ListOfActivation_MainActivity2_Holder(mInflator!!.inflate(R.layout.activities_layout_items_type2,parent,false))
}
return null // -----> **problem return null**
}
override fun getItemCount(): Int {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun getItemViewType(position: Int): Int {
return mList!![position].viewType
}
class ListOfActivation_MainActivity_Holder(itemView: View):BaseViewHolder<ListOfActivation_MainActivity>(itemView)
{
override fun bind(_object: ListOfActivation_MainActivity) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
class ListOfActivation_MainActivity2_Holder(itemView: View):BaseViewHolder<ListOfActivation2_MainActivity>(itemView)
{
override fun bind(_object: ListOfActivation2_MainActivity) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
class activation\u items\u main\u活动(list:list,context:context):RecyclerView.Adapter(){
私有变量mList:列表?=null
私有变量mInflator:LayoutInflater?=null
初始化{
this.mList=list
this.mInflator=LayoutInflater.from(上下文)
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):BaseViewHolder{
何时(视图类型)
{
常量\u ViewType\u RecyclerView.ViewType.ListOfActivation\u Type1->返回ListOfActivation\u MainActivity\u持有者(mInflator!!.充气(R.layout.activities\u layout\u项目,父项,false))
常量\u ViewType\u RecyclerView.ViewType.ListOfActivation\u Type2->返回ListOfActivation\u MainActivity2\u保持架(mInflator!!.充气(R.layout.activities\u layout\u items\u Type2,父项,false))
}
返回null/->**问题返回null**
}
重写getItemCount():Int{
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
覆盖BindViewHolder(holder:BaseViewHolder,位置:Int){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
覆盖getItemViewType(位置:Int):Int{
返回mList!![position].viewType
}
活动的类列表\u main活动\u持有者(项目视图:视图):BaseViewHolder(项目视图)
{
重写趣味绑定(_对象:ListOfActivation_MainActivity){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
}
Activation\u MainActivity2\u Holder(项目视图:视图)的类列表:BaseViewHolder(项目视图)
{
重写趣味绑定(_对象:ListOfActivation2_MainActivity){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
}
现在,我无法在表达式When()之后的onCreateViewHolder方法中返回null值,并显示消息error“null不能是非null类型BaseViewHolder的值”
我不知道如何修复它。不要在onCreateViewHolder方法中返回null,请尝试执行以下代码
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
when (viewType)
{
Constant_ViewType_RecyclerView.ViewType.ListOfActivation_Type1 -> return ListOfActivation_MainActivity_Holder(mInflator!!.inflate(R.layout.activities_layout_item,parent,false))
else -> return ListOfActivation_MainActivity2_Holder(mInflator!!.inflate(R.layout.activities_layout_items_type2,parent,false))
}
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):BaseViewHolder{
何时(视图类型)
{
常量\u ViewType\u RecyclerView.ViewType.ListOfActivation\u Type1->返回ListOfActivation\u MainActivity\u持有者(mInflator!!.充气(R.layout.activities\u layout\u项目,父项,false))
else->return list of activation\u main activity2\u Holder(mInflator!!.flate(R.layout.activities\u layout\u items\u type2,parent,false))
}
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):BaseViewHolder{
返回时间(viewType){
常量\u ViewType\u RecyclerView.ViewType.ListOfActivation\u Type1->ListOfActivation\u main activity\u支架(mInflator!!.充气(R.layout.activities\u layout\u项目,父项,false))
常量\u ViewType\u RecyclerView.ViewType.ListOfActivation\u Type2->ListOfActivation\u MainActivity2\u保持架(mInflator!!.充气(R.layout.activities\u layout\u item2,父项,假))
else->抛出IllegalStateException(“非法视图类型”)
}
}
谢谢您的回答请看