@@ -9,22 +9,40 @@ import com.jackson.openlibrary.OpenLibraryApp
99import com.jackson.openlibrary.R
1010import com.willowtreeapps.common.Actions
1111import com.willowtreeapps.common.BookListItemViewState
12+ import com.willowtreeapps.common.ui.ListHeader
1213import kotlinx.android.synthetic.main.item_book.view.*
14+ import kotlinx.android.synthetic.main.item_list_header.view.*
1315
14- class BooksAdapter : RecyclerView .Adapter <BookViewHolder >() {
15- private var data = listOf<BookListItemViewState >()
16+ class BooksAdapter : RecyclerView .Adapter <RecyclerView . ViewHolder >() {
17+ private var data = listOf<Any >()
1618
17- override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): BookViewHolder {
18- return BookViewHolder (LayoutInflater .from(parent.context).inflate(R .layout.item_book, parent, false ))
19+ override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): RecyclerView .ViewHolder {
20+ val view = LayoutInflater .from(parent.context).inflate(viewType, parent, false )
21+ return when (viewType) {
22+ R .layout.item_book -> BookViewHolder (view)
23+ R .layout.item_list_header -> HeaderViewHolder (view)
24+ else -> throw NotImplementedError (" BooksAdapter not handling type" )
25+ }
1926 }
2027
2128 override fun getItemCount () = data.size
2229
23- override fun onBindViewHolder (holder : BookViewHolder , position : Int ) {
24- holder.bind(data[position])
30+ override fun getItemViewType (position : Int ): Int {
31+ return when (data[position]) {
32+ is ListHeader -> R .layout.item_list_header
33+ is BookListItemViewState -> R .layout.item_book
34+ else -> throw NotImplementedError (" not handled in BookAdapter" )
35+ }
2536 }
2637
27- fun setBooks (books : List <BookListItemViewState >) {
38+ override fun onBindViewHolder (holder : RecyclerView .ViewHolder , position : Int ) {
39+ when (holder) {
40+ is HeaderViewHolder -> holder.bind((data[position] as ListHeader ).title)
41+ is BookViewHolder -> holder.bind(data[position] as BookListItemViewState )
42+ }
43+ }
44+
45+ fun setBooks (books : List <Any >) {
2846 data = books
2947 notifyDataSetChanged()
3048 }
@@ -42,4 +60,10 @@ class BookViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
4260 itemView.setOnClickListener { OpenLibraryApp .gameEngine().dispatch(Actions .BookSelected (book)) }
4361 }
4462
45- }
63+ }
64+ class HeaderViewHolder (itemView : View ): RecyclerView.ViewHolder(itemView) {
65+ fun bind (title : String ) {
66+ itemView.tvListTitle.text = title
67+ }
68+ }
69+
0 commit comments