From 8d4f741007245c6241be7b1b6b23f8b8395ed5d0 Mon Sep 17 00:00:00 2001 From: sjjeong Date: Wed, 8 Jan 2020 12:44:02 +0900 Subject: [PATCH] add vm, viewModel attr --- app/src/main/res/layout/activity_mvvm.xml | 1 + .../dinorecyclerview/RecyclerViewExt.kt | 78 ++++++++++++++++--- 2 files changed, 67 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/activity_mvvm.xml b/app/src/main/res/layout/activity_mvvm.xml index f7fab60..8d29a29 100644 --- a/app/src/main/res/layout/activity_mvvm.xml +++ b/app/src/main/res/layout/activity_mvvm.xml @@ -28,6 +28,7 @@ android:layout_height="match_parent" app:layoutManager="androidx.recyclerview.widget.StaggeredGridLayoutManager" app:spanCount="3" + bind:dino_vm="@{vm}" bind:dino_itemLayout="@{@layout/item_vector_asset}" bind:dino_itemSpace="@{`8dp`}" bind:dino_items="@{vm.vectorAssetItems}" diff --git a/simplerecyclerview/src/main/java/com/dino/library/dinorecyclerview/RecyclerViewExt.kt b/simplerecyclerview/src/main/java/com/dino/library/dinorecyclerview/RecyclerViewExt.kt index b52b5b3..abf7dd1 100755 --- a/simplerecyclerview/src/main/java/com/dino/library/dinorecyclerview/RecyclerViewExt.kt +++ b/simplerecyclerview/src/main/java/com/dino/library/dinorecyclerview/RecyclerViewExt.kt @@ -24,12 +24,7 @@ fun RecyclerView.setDinoAdapter( @LayoutRes adapterItemId: Int, items: List? ) { - val simpleAdapter = - this.adapter as? DinoAdapter - ?: DinoAdapter(adapterItemId).also { - this.adapter = it - } - simpleAdapter.replaceAll(items) + setDinoAdapterWithEventHolder(adapterItemId, items, null) } /** @@ -52,6 +47,36 @@ fun RecyclerView.setDinoAdapterWithEventHolder( simpleAdapter.replaceAll(items) } +/** + * dino_itemLayout="@{@layout/item_main}" + * dino_items="@{vm.liveMainItem}" + * dino_vm="@{vm} + */ +@Suppress("UNCHECKED_CAST") +@BindingAdapter("dino_itemLayout", "dino_items", "dino_vm") +fun RecyclerView.setDinoAdapterWithVm( + @LayoutRes adapterItemId: Int, + items: List?, + vm: Any? +) { + setDinoAdapterWithEventHolder(adapterItemId, items, vm) +} + +/** + * dino_itemLayout="@{@layout/item_main}" + * dino_items="@{vm.liveMainItem}" + * dino_viewModel="@{viewModel} + */ +@Suppress("UNCHECKED_CAST") +@BindingAdapter("dino_itemLayout", "dino_items", "dino_viewModel") +fun RecyclerView.setDinoAdapterWithViewModel( + @LayoutRes adapterItemId: Int, + items: List?, + viewModel: Any? +) { + setDinoAdapterWithEventHolder(adapterItemId, items, viewModel) +} + /** * dino_diffCallback="@{(Object)MainItem.Companion}" * dino_itemLayout="@{@layout/item_main}" @@ -64,12 +89,7 @@ fun RecyclerView.setDinoListAdapter( diffCallback: DiffUtil.ItemCallback, items: List? ) { - val simpleListAdapter = - this.adapter as? DinoListAdapter - ?: DinoListAdapter(dino_itemLayout, diffCallback).also { - this.adapter = it - } - simpleListAdapter.submitList(items) + setDinoListAdapterWithEventHolder(dino_itemLayout, diffCallback, items, null) } /** @@ -94,6 +114,40 @@ fun RecyclerView.setDinoListAdapterWithEventHolder( simpleListAdapter.submitList(items) } +/** + * dino_diffCallback="@{(Object)MainItem.Companion}" + * dino_itemLayout="@{@layout/item_main}" + * dino_items="@{vm.liveMainItem}" + * dino_vm="@{vm} + */ +@Suppress("UNCHECKED_CAST") +@BindingAdapter("dino_itemLayout", "dino_diffCallback", "dino_items", "dino_vm") +fun RecyclerView.setDinoListAdapterWithVm( + @LayoutRes dino_itemLayout: Int, + diffCallback: DiffUtil.ItemCallback, + items: List?, + vm: Any? +) { + setDinoListAdapterWithEventHolder(dino_itemLayout, diffCallback, items, vm) +} + +/** + * dino_diffCallback="@{(Object)MainItem.Companion}" + * dino_itemLayout="@{@layout/item_main}" + * dino_items="@{vm.liveMainItem}" + * dino_viewModel="@{viewModel} + */ +@Suppress("UNCHECKED_CAST") +@BindingAdapter("dino_itemLayout", "dino_diffCallback", "dino_items", "dino_viewModel") +fun RecyclerView.setDinoListAdapterWithViewModel( + @LayoutRes dino_itemLayout: Int, + diffCallback: DiffUtil.ItemCallback, + items: List?, + viewModel: Any? +) { + setDinoListAdapterWithEventHolder(dino_itemLayout, diffCallback, items, viewModel) +} + @BindingAdapter("dino_itemSpace")