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

问题描述 投票:2回答:2

我正在尝试在适配器上适应两种不同的布局,但是我没有成功,我尝试了不同的方式,我仍在学习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)
}
android kotlin android-recyclerview adapter
2个回答
0
投票

您缺少一些方法,这些方法应该实现,以使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(private val context: Context?, private val auctionList: List<Auction>, private var viewType: Int) : 
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder = when (viewType) {
                SECTION_AUCTION -> AuctionHolder(LayoutInflater.from(parent.context).inflate(R.layout.adapter_auction, parent, false))
                SECTION_AUCTIONS -> AuctionsHolder(LayoutInflater.from(parent.context).inflate(R.layout.adapter_auctions, parent, false))
                else -> throw IllegalArgumentException("Unsupported view type $viewType")
        }

-1
投票

如果要给RecyclerView充气,则应执行下一个

第一图书馆

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"
    />

第三适配器

public class Name extends RecyclerView.Adapter<RVAdapter.PersonViewHolder>{

第四套适配器

RVAdapter adapter = new RVAdapter(persons);
rv.setAdapter(adapter);
© www.soinside.com 2019 - 2024. All rights reserved.