如何创建带有粘性标头和副标头(recyclerview structure)的recyclerView适配器? 一开始,我喜欢使用FlexibleAdapter制作的example。在该示例中,只有粘性标头。
data class SectionItem(private val title: String, private val headerItem: HeaderItem) :
AbstractFlexibleItem(),
ISectionable {
override fun getLayoutRes(): Int = R.layout.section
override fun getHeader(): HeaderItem = headerItem
override fun setHeader(headerItem: HeaderItem) {
}
override fun createViewHolder(view: View?, adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>?): ViewHolder = ViewHolder(view, adapter)
override fun bindViewHolder(adapter: FlexibleAdapter<IFlexible<RecyclerView.ViewHolder>>?, holder: ViewHolder?, position: Int, payloads: MutableList<Any>?) {
holder?.let {
it.title.text = title
}
}
class ViewHolder(view: View?, adapter: FlexibleAdapter<*>?) : FlexibleViewHolder(view, adapter) {
var title: TextView = view?.findViewById(R.id.title)!!
}}
在SectionItem中,我无法使用subHeader实现ISectionable。 看了FlexibleAdapter库的文档后,我认为不可能创建带有子标头的列表结构。请告诉我们还有什么其他方法可以使子标头与recyclerview structure匹配。
答案 0 :(得分:0)
我猜您的模型具有某种有关日期的数据。如果我做事不对劲,则必须创建3个不同的ViewHolders:
现在创建将接受List<YourJsonObject>
列表的方法。在该方法内部,您将必须遍历该列表并检查模型的日期。在其中,您应该设置一些逻辑以检查先前的YourJsonObject
日期。
val newList = mutableListOf<SomeKindOfInterface>()
fun setData(list: List<YourJsonObject>) {
newList.clear()
var previousMonth = 0
var previousDay = 0
for (yourJsonObject in list) {
if (yourJsonObject.month != previousMonth) {
previousMonth = yourJsonObject.month
newList.add(MonthObject(yourJsonObject.month))
}
if (yourJsonObject.day != previousDay) {
previousDay = yourJsonObject.day
newList.add(DayObject(yourJsonObject.day))
}
newList.add(yourJsonObject)
}
}
class YourJsonObject(
val month: Int,
val day: Int
) : SomeKindOfInterface
class MonthObject(val month: Int) : SomeKindOfInterface
class DayObject(val day: Int) : SomeKindOfInterface
interface SomeKindOfInterface
此后,您应该覆盖getItemViewType(position: Int)
和onCreateViewHolder(parent: ViewGroup, viewType: Int)
。在其中根据newList
的项目位置,根据您的数据返回不同的ViewType。
override fun getItemViewType(position: Int): Int {
return when (newList.get(position)) {
is YourJsonObject -> 0
is MonthObject -> 1
is DayObject -> 2
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return when (viewType) {
0 -> createYourJsonObjectViewHolder
1 -> createMonthObjectViewHolder
2 -> createDayObjectViewHolder
}
}
我在这里给您提供的代码当然只是示例,但有了这些信息,您应该可以将其用于您的问题。
MonthObject
是您的StickyHeader,而DayObject
是您的SubHeader。