diff --git a/app/build.gradle b/app/build.gradle index 8c7b0a1..61ba508 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,6 +49,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation "androidx.core:core-ktx:1.7.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" } repositories { diff --git a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/DataSource.kt b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/DataSource.kt new file mode 100644 index 0000000..71df56e --- /dev/null +++ b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/DataSource.kt @@ -0,0 +1,17 @@ +package com.realwear.uxlibrary_example.horizontalselectorexample + +object DataSource { + val arr = arrayOf( + TestColor.Black, + TestColor.Brown, + TestColor.Red, + TestColor.Orange, + TestColor.Yellow, + TestColor.Green, + TestColor.Cyan, + TestColor.Blue, + TestColor.Violet, + TestColor.Gray, + TestColor.White + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/ExampleAdapter.kt b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/ExampleAdapter.kt index 687617f..fbfaff3 100644 --- a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/ExampleAdapter.kt +++ b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/ExampleAdapter.kt @@ -44,20 +44,7 @@ class ExampleAdapter(context: Context) : HorizontalSelectorAdapter(context) { private val weakContext: WeakReference = WeakReference(context) private val localTag = ExampleAdapter::class.java.simpleName - - private val arr = arrayOf( - TestColor.Black, - TestColor.Brown, - TestColor.Red, - TestColor.Orange, - TestColor.Yellow, - TestColor.Green, - TestColor.Cyan, - TestColor.Blue, - TestColor.Violet, - TestColor.Gray, - TestColor.White - ) + private var arr: Array = emptyArray() override fun onCreateViewHolder(parent: ViewGroup): ExampleViewHolder { return ExampleViewHolder( @@ -105,6 +92,13 @@ class ExampleAdapter(context: Context) : else -> null } } + + fun updateArray(array: Array) { + arr = array + + // FIXME: When adapter is updated from LiveData items sometimes are not fully inflated + notifyDataSetChanged() + } } /** diff --git a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/FragmentHorizontalSelectorExample.kt b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/FragmentHorizontalSelectorExample.kt index fde15bc..b158d50 100644 --- a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/FragmentHorizontalSelectorExample.kt +++ b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/FragmentHorizontalSelectorExample.kt @@ -93,7 +93,9 @@ class CustomDialogFragment : DialogFragment() { ) val view = binding.root - binding.horizontalSelector.setAdapter(ExampleAdapter(weakContext.get()!!)) + val adapter = ExampleAdapter(weakContext.get()!!) + binding.horizontalSelector.setAdapter(adapter) + adapter.updateArray(DataSource.arr) // No ViewModel - no bug /** * Method demonstrating how to get the index of the focused item. diff --git a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleActivity.kt b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleActivity.kt index 797d016..46bcc6f 100644 --- a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleActivity.kt +++ b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleActivity.kt @@ -10,6 +10,7 @@ package com.realwear.uxlibrary_example.horizontalselectorexample import android.os.Bundle import android.view.View import android.widget.Toast +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import com.realwear.uxlibrary_example.R import com.realwear.uxlibrary_example.databinding.ActivityHorizontalSelectorBinding @@ -19,6 +20,10 @@ import com.realwear.uxlibrary_example.databinding.ActivityHorizontalSelectorBind */ class HorizontalSelectorExampleActivity : AppCompatActivity() { private lateinit var binding: ActivityHorizontalSelectorBinding + + private val viewModel by viewModels() + private val adapter = ExampleAdapter(this) + private var centerBorderVisibility = View.VISIBLE override fun onCreate(savedInstanceState: Bundle?) { @@ -26,7 +31,11 @@ class HorizontalSelectorExampleActivity : AppCompatActivity() { binding = ActivityHorizontalSelectorBinding.inflate(layoutInflater) setContentView(binding.root) - binding.horizontalSelector.setAdapter(ExampleAdapter(this)) + binding.horizontalSelector.setAdapter(adapter) + viewModel.getArray().observe(this) { + // FIXME: ViewModel observing causes bug with items + adapter.updateArray(it) + } } /** diff --git a/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleViewModel.kt b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleViewModel.kt new file mode 100644 index 0000000..028f246 --- /dev/null +++ b/app/src/main/java/com/realwear/uxlibrary_example/horizontalselectorexample/HorizontalSelectorExampleViewModel.kt @@ -0,0 +1,12 @@ +package com.realwear.uxlibrary_example.horizontalselectorexample + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.liveData +import kotlinx.coroutines.Dispatchers + +class HorizontalSelectorExampleViewModel : ViewModel() { + + fun getArray() = liveData(Dispatchers.IO) { + emit(DataSource.arr) + } +} \ No newline at end of file