kotlin 基于ItemViewType过滤过滤器ClerView

cvxl0en2  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(117)

我获取了一个Offer列表(OfferBaseModel)。Offers可以有两种类型:个人收藏夹。现在我想在选项卡选择上显示这些

open class OfferBaseModel -> Parent Class
data class PersonalOfferModel(val personalOffer: PersonalOffer) : OfferBaseModel()
data class FavoriteOfferModel(val product: Product) : OfferBaseModel()

我必须为两个项目使用相同的RecyclerView。如果我点击PersonOffer选项卡RecyclerView应该只过滤PersonalOfferItemViewType,当我点击FavouriteOffer Tab时,它应该只显示FavouriteItemViewType。当我点击第三个选项卡**(全部)**时。它应该显示两种类型的数据
我必须过滤相同的列表,因为我必须跟踪在任何选项卡中查看一次的报价。
我不想提供新的列表选项卡上的选择。仅根据viewItemType进行筛选。

所有优惠选项卡||优惠选项卡||个人优惠选项卡

但是它下面的ClerView保持沿着不变,只提供一次same list。仅过滤以上选项卡上的选择。

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    when (getItemViewType(position)) {
        TYPE_PERSONAL_SECTION -> (holder as PersonalOfferViewHolder).bind(position)
        TYPE_FAVOURITE_SECTION -> (holder as FavouriteOfferViewHolder).bind(position)
    }
}

override fun getItemViewType(position: Int): Int {
    return if (sections[position].shopSectionEntity.styling == "SecondarySection") {
        TYPE_PERSONAL_SECTION
    } else {
        TYPE_FAVOURITE_SECTION
    }
}

我创建了一个TrackableRecyclerView。每个项目必须是tracked once。我的意思是,如果Personal Offer个人优惠标签中查看。如果在所有部分选项卡中显示相同的产品,则不应再次调用analytics tracking

5sxhfpxr

5sxhfpxr1#

很难从现有的代码中做出推论,但我想提供一些逻辑。

enum class ViewType {
    PERSONAL, FAVOURITE, BOTH
} // your condition view

var currentViewType = ViewType.BOTH // default view

fun updateViewType(viewType: ViewType) {
    currentViewType = viewType
    notifyDataSetChanged() // or diffUtil
}

override fun getItemViewType(position: Int): Int {
    return when (currentViewType) {
        ViewType.PERSONAL -> if (sections[position] is PersonalOfferModel) {
            TYPE_PERSONAL_SECTION
        } else -1
        ViewType.FAVOURITE -> if (sections[position] is FavoriteOfferModel) {
            TYPE_FAVOURITE_SECTION
        } else -1
        else -> if (sections[position] is PersonalOfferModel) {
            TYPE_PERSONAL_SECTION
        } else if (sections[position] is FavoriteOfferModel) {
            TYPE_FAVOURITE_SECTION
        } else -1
    }
}

和你的条件按钮

firstButton.setOnClickListener {
    adapter.updateViewType(ViewType.PERSONAL)
}

secondButton.setOnClickListener {
    adapter.updateViewType(ViewType.FAVOURITE)
}

thirdButton.setOnClickListener {
    adapter.updateViewType(ViewType.BOTH)
}

相关问题