From 34c07182c246717e52b4b6b1c8c423ed7fb36b0e Mon Sep 17 00:00:00 2001 From: dumchev Date: Tue, 11 Dec 2018 15:14:21 +0300 Subject: [PATCH 1/4] CompositeAdapter example --- .../base/BaseExampleActivity.java | 2 ++ .../base/MockDataFactory.java | 10 +++++-- .../base/adapter/CompositeDelegateAdapter.kt | 26 +++++++++++++++++++ .../base/model/CompositeModel.kt | 15 +++++++++++ .../src/main/res/layout/composite_item.xml | 12 +++++++++ example/src/main/res/values/colors.xml | 1 + 6 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 example/src/main/java/com/example/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt create mode 100644 example/src/main/java/com/example/dumchev/delegateadapters/base/model/CompositeModel.kt create mode 100644 example/src/main/res/layout/composite_item.xml diff --git a/example/src/main/java/com/example/dumchev/delegateadapters/base/BaseExampleActivity.java b/example/src/main/java/com/example/dumchev/delegateadapters/base/BaseExampleActivity.java index 1a5d123..e7f3511 100644 --- a/example/src/main/java/com/example/dumchev/delegateadapters/base/BaseExampleActivity.java +++ b/example/src/main/java/com/example/dumchev/delegateadapters/base/BaseExampleActivity.java @@ -11,6 +11,7 @@ import com.example.delegateadapter.delegate.diff.DiffUtilCompositeAdapter; import com.example.dumchev.delegateadapters.R; import com.example.dumchev.delegateadapters.base.adapter.CheckDelegateAdapter; +import com.example.dumchev.delegateadapters.base.adapter.CompositeDelegateAdapter; import com.example.dumchev.delegateadapters.base.adapter.ImageDelegateAdapter; import com.example.dumchev.delegateadapters.base.adapter.TextDelegateAdapter; @@ -41,6 +42,7 @@ public void onClick(View v) { .add(new ImageDelegateAdapter(onImageClick)) .add(new TextDelegateAdapter()) .add(new CheckDelegateAdapter()) + .add(new CompositeDelegateAdapter(onImageClick)) .build(); recyclerView = findViewById(R.id.rv); diff --git a/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java b/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java index dd89730..e55253f 100644 --- a/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java +++ b/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java @@ -3,6 +3,7 @@ import com.example.delegateadapter.delegate.diff.IComparableItem; import com.example.dumchev.delegateadapters.R; import com.example.dumchev.delegateadapters.base.model.CheckViewModel; +import com.example.dumchev.delegateadapters.base.model.CompositeModel; import com.example.dumchev.delegateadapters.base.model.IViewModel; import com.example.dumchev.delegateadapters.base.model.ImageViewModel; import com.example.dumchev.delegateadapters.base.model.TextViewModel; @@ -23,13 +24,18 @@ static List prepareData() { Random random = new Random(); for (int i = 0; i < SIZE; i++) { IComparableItem item; - int type = random.nextInt(3); + int type = random.nextInt(4); if (type == 0) { item = new TextViewModel("Title " + i, "Description " + i); } else if (type == 1) { item = new ImageViewModel("Title " + i, R.mipmap.ic_launcher_round); - } else { + } else if (type == 2) { item = new CheckViewModel("You still love this lib", true); + } else { + item = new CompositeModel( + new ImageViewModel("Title " + i, R.mipmap.ic_launcher_round), + new TextViewModel("Title " + i, "Description " + i) + ); } objects.add(item); } diff --git a/example/src/main/java/com/example/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt b/example/src/main/java/com/example/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt new file mode 100644 index 0000000..c4c500e --- /dev/null +++ b/example/src/main/java/com/example/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt @@ -0,0 +1,26 @@ +package com.example.dumchev.delegateadapters.base.adapter + +import android.view.View +import com.example.delegateadapter.delegate.KDelegateAdapter +import com.example.dumchev.delegateadapters.R +import com.example.dumchev.delegateadapters.base.model.CompositeModel + +/** + * @author dumchev on 11/12/2018. + */ +class CompositeDelegateAdapter(clicks: View.OnClickListener) : KDelegateAdapter() { + + val textDelegateAdapter by lazy { TxtDelegateAdapter() } + val imageDelegateAdapter by lazy { ImageDelegateAdapter(clicks) } + + override fun onBind(item: CompositeModel, viewHolder: KViewHolder) { + textDelegateAdapter.onBind(item.textViewModel, viewHolder) + imageDelegateAdapter.onBind(item.imageViewModel, viewHolder) + } + + override fun getLayoutId(): Int = R.layout.composite_item + + override fun isForViewType(items: MutableList<*>, position: Int): Boolean { + return items[position] is CompositeModel + } +} \ No newline at end of file diff --git a/example/src/main/java/com/example/dumchev/delegateadapters/base/model/CompositeModel.kt b/example/src/main/java/com/example/dumchev/delegateadapters/base/model/CompositeModel.kt new file mode 100644 index 0000000..f0cbfbf --- /dev/null +++ b/example/src/main/java/com/example/dumchev/delegateadapters/base/model/CompositeModel.kt @@ -0,0 +1,15 @@ +package com.example.dumchev.delegateadapters.base.model + +import com.example.delegateadapter.delegate.diff.IComparableItem + +/** + * @author dumchev on 11/12/2018. + */ +data class CompositeModel( + val imageViewModel: ImageViewModel, + val textViewModel: TextViewModel +) : IComparableItem { + + override fun id(): Any = "" + imageViewModel.id() + textViewModel.id() + override fun content(): Any = this +} \ No newline at end of file diff --git a/example/src/main/res/layout/composite_item.xml b/example/src/main/res/layout/composite_item.xml new file mode 100644 index 0000000..4b89241 --- /dev/null +++ b/example/src/main/res/layout/composite_item.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/example/src/main/res/values/colors.xml b/example/src/main/res/values/colors.xml index 3ab3e9c..1ef660c 100644 --- a/example/src/main/res/values/colors.xml +++ b/example/src/main/res/values/colors.xml @@ -3,4 +3,5 @@ #3F51B5 #303F9F #FF4081 + #fffdb9 From a7ddb2cca5dd258b3b5b3f8d77a042f8abd74805 Mon Sep 17 00:00:00 2001 From: dumchev Date: Wed, 8 Apr 2020 01:23:55 +0300 Subject: [PATCH 2/4] merge master --- .../delegate/KDelegateAdapter.kt | 3 +- .../base/MockDataFactory.java | 44 ------------------- .../base/KotlinBaseExampleActivity.kt | 2 + .../base/MockDataFactory.java | 10 ++++- .../base/adapter/CompositeDelegateAdapter.kt | 22 +++++----- .../base/model/CompositeModel.kt | 12 ++--- 6 files changed, 27 insertions(+), 66 deletions(-) delete mode 100644 example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java diff --git a/delegateadapter/src/main/java/com/livermor/delegateadapter/delegate/KDelegateAdapter.kt b/delegateadapter/src/main/java/com/livermor/delegateadapter/delegate/KDelegateAdapter.kt index 20729a0..b7035b7 100644 --- a/delegateadapter/src/main/java/com/livermor/delegateadapter/delegate/KDelegateAdapter.kt +++ b/delegateadapter/src/main/java/com/livermor/delegateadapter/delegate/KDelegateAdapter.kt @@ -6,8 +6,7 @@ import kotlinx.android.extensions.LayoutContainer /** * @author dumchev on 04.11.17. */ -abstract class KDelegateAdapter - : BaseDelegateAdapter() { +abstract class KDelegateAdapter : BaseDelegateAdapter() { open fun onCreated(view: View) = Unit diff --git a/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java b/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java deleted file mode 100644 index e55253f..0000000 --- a/example/src/main/java/com/example/dumchev/delegateadapters/base/MockDataFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.example.dumchev.delegateadapters.base; - -import com.example.delegateadapter.delegate.diff.IComparableItem; -import com.example.dumchev.delegateadapters.R; -import com.example.dumchev.delegateadapters.base.model.CheckViewModel; -import com.example.dumchev.delegateadapters.base.model.CompositeModel; -import com.example.dumchev.delegateadapters.base.model.IViewModel; -import com.example.dumchev.delegateadapters.base.model.ImageViewModel; -import com.example.dumchev.delegateadapters.base.model.TextViewModel; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -/** - * @author dumchev on 05.11.17. - */ -class MockDataFactory { - - private static final int SIZE = 20; - - static List prepareData() { - ArrayList objects = new ArrayList<>(SIZE); - Random random = new Random(); - for (int i = 0; i < SIZE; i++) { - IComparableItem item; - int type = random.nextInt(4); - if (type == 0) { - item = new TextViewModel("Title " + i, "Description " + i); - } else if (type == 1) { - item = new ImageViewModel("Title " + i, R.mipmap.ic_launcher_round); - } else if (type == 2) { - item = new CheckViewModel("You still love this lib", true); - } else { - item = new CompositeModel( - new ImageViewModel("Title " + i, R.mipmap.ic_launcher_round), - new TextViewModel("Title " + i, "Description " + i) - ); - } - objects.add(item); - } - return objects; - } -} diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt index a0800fd..a7d8295 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt @@ -6,6 +6,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import com.livermor.delegateadapter.delegate.diff.DiffUtilCompositeAdapter import com.livermor.dumchev.delegateadapters.base.adapter.CheckDelegateAdapter +import com.livermor.dumchev.delegateadapters.base.adapter.CompositeDelegateAdapter import com.livermor.dumchev.delegateadapters.base.adapter.GenerateItemsDelegateAdapter import com.livermor.dumchev.delegateadapters.base.adapter.TextDelegateAdapter import kotlinx.android.synthetic.main.activity_base_example.* @@ -17,6 +18,7 @@ class KotlinBaseExampleActivity : AppCompatActivity() { .add(GenerateItemsDelegateAdapter { generateNewData() }) .add(TextDelegateAdapter()) .add(CheckDelegateAdapter()) + .add(CompositeDelegateAdapter(View.OnClickListener { generateNewData() })) .build() } diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java index 7ed449f..f5c986a 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java @@ -3,6 +3,7 @@ import com.livermor.delegateadapter.delegate.diff.DiffUtilItem; import com.livermor.dumchev.delegateadapters.R; import com.livermor.dumchev.delegateadapters.base.model.CheckItem; +import com.livermor.dumchev.delegateadapters.base.model.CompositeModel; import com.livermor.dumchev.delegateadapters.base.model.ImageItem; import com.livermor.dumchev.delegateadapters.base.model.TextItem; @@ -22,13 +23,18 @@ static List prepareData() { Random random = new Random(); for (int i = 0; i < SIZE; i++) { DiffUtilItem item; - int type = random.nextInt(3); + int type = random.nextInt(4); if (type == 0) { item = new TextItem("Title " + i, "Description " + i); } else if (type == 1) { item = new ImageItem("Title " + i, R.mipmap.ic_launcher_round); - } else { + } else if (type == 2) { item = new CheckItem("You still love this lib", true); + } else { + item = new CompositeModel( + new ImageItem("Title " + i, R.mipmap.ic_launcher_round), + new TextItem("Title " + i, "Description " + i) + ); } objects.add(item); } diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt index c4c500e..e00ccab 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt @@ -1,26 +1,24 @@ -package com.example.dumchev.delegateadapters.base.adapter +package com.livermor.dumchev.delegateadapters.base.adapter import android.view.View -import com.example.delegateadapter.delegate.KDelegateAdapter -import com.example.dumchev.delegateadapters.R -import com.example.dumchev.delegateadapters.base.model.CompositeModel +import com.livermor.delegateadapter.delegate.KDelegateAdapter +import com.livermor.dumchev.delegateadapters.R +import com.livermor.dumchev.delegateadapters.base.model.CompositeModel /** * @author dumchev on 11/12/2018. */ class CompositeDelegateAdapter(clicks: View.OnClickListener) : KDelegateAdapter() { - val textDelegateAdapter by lazy { TxtDelegateAdapter() } - val imageDelegateAdapter by lazy { ImageDelegateAdapter(clicks) } + private val textDelegateAdapter by lazy { TxtDelegateAdapter() } + private val imageDelegateAdapter by lazy { ImageDelegateAdapter(clicks) } - override fun onBind(item: CompositeModel, viewHolder: KViewHolder) { - textDelegateAdapter.onBind(item.textViewModel, viewHolder) - imageDelegateAdapter.onBind(item.imageViewModel, viewHolder) + override fun KViewHolder.onBind(item: CompositeModel) { + with(textDelegateAdapter) { onBind(item.textViewModel) } + with(imageDelegateAdapter) { onBind(item.imageViewModel) } } override fun getLayoutId(): Int = R.layout.composite_item - override fun isForViewType(items: MutableList<*>, position: Int): Boolean { - return items[position] is CompositeModel - } + override fun isForViewType(item: Any): Boolean = item is CompositeModel } \ No newline at end of file diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt index f0cbfbf..6c3848f 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt @@ -1,15 +1,15 @@ -package com.example.dumchev.delegateadapters.base.model +package com.livermor.dumchev.delegateadapters.base.model -import com.example.delegateadapter.delegate.diff.IComparableItem +import com.livermor.delegateadapter.delegate.diff.KDiffUtilItem /** * @author dumchev on 11/12/2018. */ data class CompositeModel( - val imageViewModel: ImageViewModel, - val textViewModel: TextViewModel -) : IComparableItem { + val imageViewModel: ImageItem, + val textViewModel: TextItem +) : KDiffUtilItem { - override fun id(): Any = "" + imageViewModel.id() + textViewModel.id() + override val id: Any = "" + imageViewModel.id() + textViewModel.id() override fun content(): Any = this } \ No newline at end of file From 839fe4206d686ca6fc3cafc1dfc030f57a495ff4 Mon Sep 17 00:00:00 2001 From: dumchev Date: Wed, 8 Apr 2020 01:31:03 +0300 Subject: [PATCH 3/4] rename composite to concatenate --- .idea/vcs.xml | 2 +- .../delegateadapters/base/KotlinBaseExampleActivity.kt | 4 ++-- .../dumchev/delegateadapters/base/MockDataFactory.java | 4 ++-- ...ompositeDelegateAdapter.kt => ConcatenatingAdapter.kt} | 8 ++++---- .../model/{CompositeModel.kt => ConcatenetedModel.kt} | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/{CompositeDelegateAdapter.kt => ConcatenatingAdapter.kt} (65%) rename example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/{CompositeModel.kt => ConcatenetedModel.kt} (92%) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt index a7d8295..42cc92f 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/KotlinBaseExampleActivity.kt @@ -6,7 +6,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import com.livermor.delegateadapter.delegate.diff.DiffUtilCompositeAdapter import com.livermor.dumchev.delegateadapters.base.adapter.CheckDelegateAdapter -import com.livermor.dumchev.delegateadapters.base.adapter.CompositeDelegateAdapter +import com.livermor.dumchev.delegateadapters.base.adapter.ConcatenatingAdapter import com.livermor.dumchev.delegateadapters.base.adapter.GenerateItemsDelegateAdapter import com.livermor.dumchev.delegateadapters.base.adapter.TextDelegateAdapter import kotlinx.android.synthetic.main.activity_base_example.* @@ -18,7 +18,7 @@ class KotlinBaseExampleActivity : AppCompatActivity() { .add(GenerateItemsDelegateAdapter { generateNewData() }) .add(TextDelegateAdapter()) .add(CheckDelegateAdapter()) - .add(CompositeDelegateAdapter(View.OnClickListener { generateNewData() })) + .add(ConcatenatingAdapter(View.OnClickListener { generateNewData() })) .build() } diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java index f5c986a..eeb9baa 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/MockDataFactory.java @@ -3,7 +3,7 @@ import com.livermor.delegateadapter.delegate.diff.DiffUtilItem; import com.livermor.dumchev.delegateadapters.R; import com.livermor.dumchev.delegateadapters.base.model.CheckItem; -import com.livermor.dumchev.delegateadapters.base.model.CompositeModel; +import com.livermor.dumchev.delegateadapters.base.model.ConcatenetedModel; import com.livermor.dumchev.delegateadapters.base.model.ImageItem; import com.livermor.dumchev.delegateadapters.base.model.TextItem; @@ -31,7 +31,7 @@ static List prepareData() { } else if (type == 2) { item = new CheckItem("You still love this lib", true); } else { - item = new CompositeModel( + item = new ConcatenetedModel( new ImageItem("Title " + i, R.mipmap.ic_launcher_round), new TextItem("Title " + i, "Description " + i) ); diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/ConcatenatingAdapter.kt similarity index 65% rename from example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt rename to example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/ConcatenatingAdapter.kt index e00ccab..e260c66 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/CompositeDelegateAdapter.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/adapter/ConcatenatingAdapter.kt @@ -3,22 +3,22 @@ package com.livermor.dumchev.delegateadapters.base.adapter import android.view.View import com.livermor.delegateadapter.delegate.KDelegateAdapter import com.livermor.dumchev.delegateadapters.R -import com.livermor.dumchev.delegateadapters.base.model.CompositeModel +import com.livermor.dumchev.delegateadapters.base.model.ConcatenetedModel /** * @author dumchev on 11/12/2018. */ -class CompositeDelegateAdapter(clicks: View.OnClickListener) : KDelegateAdapter() { +class ConcatenatingAdapter(clicks: View.OnClickListener) : KDelegateAdapter() { private val textDelegateAdapter by lazy { TxtDelegateAdapter() } private val imageDelegateAdapter by lazy { ImageDelegateAdapter(clicks) } - override fun KViewHolder.onBind(item: CompositeModel) { + override fun KViewHolder.onBind(item: ConcatenetedModel) { with(textDelegateAdapter) { onBind(item.textViewModel) } with(imageDelegateAdapter) { onBind(item.imageViewModel) } } override fun getLayoutId(): Int = R.layout.composite_item - override fun isForViewType(item: Any): Boolean = item is CompositeModel + override fun isForViewType(item: Any): Boolean = item is ConcatenetedModel } \ No newline at end of file diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt similarity index 92% rename from example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt rename to example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt index 6c3848f..4111476 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/CompositeModel.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt @@ -5,7 +5,7 @@ import com.livermor.delegateadapter.delegate.diff.KDiffUtilItem /** * @author dumchev on 11/12/2018. */ -data class CompositeModel( +data class ConcatenetedModel( val imageViewModel: ImageItem, val textViewModel: TextItem ) : KDiffUtilItem { From 2c9ace4844c750f6e144f0b6127b93045cf44f2e Mon Sep 17 00:00:00 2001 From: dumchev Date: Wed, 8 Apr 2020 01:32:15 +0300 Subject: [PATCH 4/4] remove redundant --- .../dumchev/delegateadapters/base/model/ConcatenetedModel.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt index 4111476..61a80ce 100644 --- a/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt +++ b/example/src/main/java/com/livermor/dumchev/delegateadapters/base/model/ConcatenetedModel.kt @@ -9,7 +9,5 @@ data class ConcatenetedModel( val imageViewModel: ImageItem, val textViewModel: TextItem ) : KDiffUtilItem { - override val id: Any = "" + imageViewModel.id() + textViewModel.id() - override fun content(): Any = this } \ No newline at end of file