File tree Expand file tree Collapse file tree 2 files changed +30
-16
lines changed
app/demo/src/main/java/net/gotev/recycleradapterdemo/activities
recycleradapter-extensions/src/main/java/net/gotev/recycleradapter/ext Expand file tree Collapse file tree 2 files changed +30
-16
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import android.content.Intent
4
4
import android.os.Bundle
5
5
import androidx.appcompat.app.AppCompatActivity
6
6
import androidx.lifecycle.ViewModelProvider
7
+ import net.gotev.recycleradapter.ext.renderableItems
7
8
import net.gotev.recycleradapterdemo.R
8
9
import net.gotev.recycleradapterdemo.adapteritems.Items
9
10
import net.gotev.recycleradapterdemo.network.State
@@ -37,20 +38,20 @@ class AsyncLoadingActivity : RecyclerViewActivity() {
37
38
}
38
39
39
40
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())
45
47
+ 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
+ )
52
53
}
53
- }
54
+ })
54
55
}
55
56
56
57
is State .Error -> {
Original file line number Diff line number Diff line change @@ -43,11 +43,24 @@ fun renderableItems(action: RenderableItems.() -> Unit): RenderableItems {
43
43
interface RecyclerAdapterProvider {
44
44
val recyclerAdapter: RecyclerAdapter
45
45
46
- fun render (renderableItems : RenderableItems ) {
47
- recyclerAdapter.syncWithItems(renderableItems.items )
46
+ fun render (canvas : RenderableItems ) {
47
+ syncItemsOrEmpty( null , canvas )
48
48
}
49
49
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()
52
65
}
53
66
}
You can’t perform that action at this time.
0 commit comments