Skip to content

Commit 6d73db0

Browse files
authored
feat: render empty item when recycleradapter is empty (#21)
1 parent 29dd787 commit 6d73db0

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

app/demo/src/main/java/net/gotev/recycleradapterdemo/activities/AsyncLoadingActivity.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Intent
44
import android.os.Bundle
55
import androidx.appcompat.app.AppCompatActivity
66
import androidx.lifecycle.ViewModelProvider
7+
import net.gotev.recycleradapter.ext.renderableItems
78
import net.gotev.recycleradapterdemo.R
89
import net.gotev.recycleradapterdemo.adapteritems.Items
910
import net.gotev.recycleradapterdemo.network.State
@@ -37,20 +38,20 @@ class AsyncLoadingActivity : RecyclerViewActivity() {
3738
}
3839

3940
is State.Success -> {
40-
render {
41-
if (status.data.results.isEmpty()) {
42-
+Items.label("No results")
43-
+reloadButton()
44-
} else {
41+
render(onEmptyCanvas = renderableItems {
42+
+Items.label("No results")
43+
+reloadButton()
44+
}, canvas = {
45+
val results = status.data.results
46+
if (results.isNotEmpty())
4547
+reloadButton()
46-
status.data.results.forEach { person ->
47-
+Items.Card.titleSubtitle(
48-
title = person.name,
49-
subtitle = "Height (cm): ${person.height}"
50-
)
51-
}
48+
results.forEach { person ->
49+
+Items.Card.titleSubtitle(
50+
title = person.name,
51+
subtitle = "Height (cm): ${person.height}"
52+
)
5253
}
53-
}
54+
})
5455
}
5556

5657
is State.Error -> {

recycleradapter-extensions/src/main/java/net/gotev/recycleradapter/ext/DeclarativeExtensions.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,24 @@ fun renderableItems(action: RenderableItems.() -> Unit): RenderableItems {
4343
interface RecyclerAdapterProvider {
4444
val recyclerAdapter: RecyclerAdapter
4545

46-
fun render(renderableItems: RenderableItems) {
47-
recyclerAdapter.syncWithItems(renderableItems.items)
46+
fun render(canvas: RenderableItems) {
47+
syncItemsOrEmpty(null, canvas)
4848
}
4949

50-
fun render(action: RenderableItems.() -> Unit) {
51-
recyclerAdapter.syncWithItems(renderableItems(action).items)
50+
fun render(onEmptyCanvas: RenderableItems? = null, canvas: RenderableItems) {
51+
syncItemsOrEmpty(onEmptyCanvas, canvas)
52+
}
53+
54+
fun render(onEmptyCanvas: RenderableItems? = null, canvas: RenderableItems.() -> Unit) {
55+
syncItemsOrEmpty(onEmptyCanvas, renderableItems(canvas))
56+
}
57+
58+
private fun syncItemsOrEmpty(onEmptyCanvas: RenderableItems?, canvas: RenderableItems) {
59+
val items = canvas.items
60+
61+
if (items.isNotEmpty())
62+
recyclerAdapter.syncWithItems(items)
63+
else
64+
onEmptyCanvas?.let { recyclerAdapter.syncWithItems(it.items) } ?: recyclerAdapter.clear()
5265
}
5366
}

0 commit comments

Comments
 (0)