如何在Android Kotlin上扩展动态布局?

如何在Android Kotlin上扩展动态布局?,android,kotlin,android-recyclerview,adapter,Android,Kotlin,Android Recyclerview,Adapter,我试图在我的适配器上安装两种不同的布局,但没有成功,我尝试了不同的方法,我还在学习Kotlin语言,但我需要创建这个适配器,有人能帮我吗 class AuctionAdapter( private val context: Context?, private val auctionList: List<Auction>, private var viewType: Int ) : RecyclerView.Adapter<AuctionAdapter.A

我试图在我的适配器上安装两种不同的布局,但没有成功,我尝试了不同的方法,我还在学习Kotlin语言,但我需要创建这个适配器,有人能帮我吗

class AuctionAdapter(
    private val context: Context?,
    private val auctionList: List<Auction>,
    private var viewType: Int
) : RecyclerView.Adapter<AuctionAdapter.AuctionHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AuctionHolder {

        val itemView: View = if (this.viewType == 1) {
            LayoutInflater.from(parent.context).inflate(R.layout.adapter_auction, parent, false)
        } else {
            LayoutInflater.from(parent.context).inflate(R.layout.adapter_auctions, parent, false)
        }

        return AuctionHolder(itemView)
    }

    override fun getItemCount(): Int {
        return auctionList.size
    }

    class AuctionHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
class AuctionAdapter(
私有val上下文:上下文?,
私人val拍卖列表:列表,
私有变量viewType:Int
):RecyclerView.Adapter(){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):AuctionHolder{
val itemView:View=if(this.viewType==1){
LayoutFlater.from(parent.context).充气(R.layout.adapter\u拍卖,parent,false)
}否则{
LayoutFlater.from(parent.context).充气(R.layout.adapter\u,parent,false)
}
返回拍卖持有人(itemView)
}
重写getItemCount():Int{
return auctionList.size
}
类AuctionHolder(itemView:View):RecyclerView.ViewHolder(itemView)
}

如果要为回收视图充气,应执行下一步操作

第一图书馆

compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
第二个容器

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rv"
    />

您缺少一些方法,您应该实现这些方法,以使
RecyclerView
了解您想要支持的不同行类型

首先,让我们为您想要支持的其他类型添加一个新的
ViewHolder

class AuctionsHolder(itemView:View):RecyclerView.ViewHolder(itemView)
其次,让我们将
getItemViewType
添加到
AuctionAdapter

class AuctionAdapter ....

    companion object {
        const val SECTION_AUCTION = 0
        const val SECTION_AUCTIONS = 1

        @Retention(AnnotationRetention.SOURCE)
        @IntDef(SECTION_AUCTION,
                SECTION_AUCTIONS)
        annotation class Section
    }

    @Section
    override fun getItemViewType(position: Int): Int = auctionList[position].type.oridinal
最后,让我们修复
onCreateViewHolder

class AuctionAdapter(私有val上下文:context?、私有val auctionList:List、私有var视图类型:Int):
RecyclerView.Adapter(){
重写onCreateViewHolder(父级:ViewGroup,viewType:Int):RecyclerView.ViewHolder=when(viewType){
部分\u拍卖->拍卖持有者(LayoutInflater.from(parent.context).充气(R.layout.adapter\u拍卖,parent,false))
部分\u拍卖->拍卖文件夹(LayoutInflater.from(parent.context).充气(R.layout.adapter\u拍卖,parent,false))
else->抛出IllegalArgumentException(“不支持的视图类型$viewType”)
}

我发布了一个代码,你能检查一下吗?我想检查一下你的代码,这是可能的。
RVAdapter adapter = new RVAdapter(persons);
rv.setAdapter(adapter);
class AuctionAdapter ....

    companion object {
        const val SECTION_AUCTION = 0
        const val SECTION_AUCTIONS = 1

        @Retention(AnnotationRetention.SOURCE)
        @IntDef(SECTION_AUCTION,
                SECTION_AUCTIONS)
        annotation class Section
    }

    @Section
    override fun getItemViewType(position: Int): Int = auctionList[position].type.oridinal