diff android/DWindows.kt @ 2561:f28d7d0ca5ed

Android: Attempt at implementing updating the container after insertion. I am trying to use notifyDataSetChanged() in our DWContainerAdapter class. This is called via _dw_container_refresh() and containerRefresh() however it does not seem to be working yet.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 18 May 2021 22:48:33 +0000
parents 3da35cd91ca7
children 11411f103d27
line wrap: on
line diff
--- a/android/DWindows.kt	Tue May 18 18:41:35 2021 +0000
+++ b/android/DWindows.kt	Tue May 18 22:48:33 2021 +0000
@@ -642,35 +642,54 @@
     }
 
     override fun getView(position: Int, view: View?, parent: ViewGroup): View {
-        val rowView = ConstraintLayout(context)
-        val set = ConstraintSet()
-
-        // Every container at least has an icon and text
-        val imageview = ImageView(context)
-        val textview = TextView(context)
-
-        if(model.numberOfColumns() > 1 && model.numberOfRows() > position) {
-            val first = model.getRowAndColumn(position, 0)
-            val second = model.getRowAndColumn(position, 1)
-
-            if(first is Drawable) {
-                imageview.setImageDrawable(first)
+        var rowView: ConstraintLayout? = view as ConstraintLayout
+
+        // If the view passed in is null we need to create the layout
+        if(rowView == null) {
+            rowView = ConstraintLayout(context)
+            val set = ConstraintSet()
+            // Every container at least has an icon and text
+            val imageview = ImageView(context)
+            val textview = TextView(context)
+
+            if (model.numberOfColumns() > 1 && model.numberOfRows() > position) {
+                val first = model.getRowAndColumn(position, 0)
+                val second = model.getRowAndColumn(position, 1)
+
+                if (first is Drawable) {
+                    imageview.setImageDrawable(first)
+                }
+                if (second is String) {
+                    textview.text = second
+                }
             }
-            if(second is String) {
-                textview.text = second
+
+            // Add the two main components to the layout
+            imageview.id = View.generateViewId()
+            textview.id = View.generateViewId()
+            rowView.addView(imageview)
+            rowView.addView(textview)
+            set.clone(rowView)
+            set.connect(imageview.id, ConstraintSet.LEFT, textview.id, ConstraintSet.RIGHT)
+            set.applyTo(rowView)
+
+            // TODO: Add code to optionally add other columns
+        } else {
+            // Otherwise we just need to update the existing layout
+            if (model.numberOfColumns() > 1 && model.numberOfRows() > position) {
+                val first = model.getRowAndColumn(position, 0)
+                val second = model.getRowAndColumn(position, 1)
+                val imageview = rowView.getChildAt(0)
+                val textview = rowView.getChildAt(1)
+
+                if (first is Drawable && imageview is ImageView) {
+                    imageview.setImageDrawable(first)
+                }
+                if (second is String && textview is TextView) {
+                    textview.text = second
+                }
             }
         }
-
-        // Add the two main components to the layout
-        imageview.id = View.generateViewId()
-        textview.id = View.generateViewId()
-        rowView.addView(imageview)
-        rowView.addView(textview)
-        set.clone(rowView)
-        set.connect(imageview.id, ConstraintSet.LEFT, textview.id, ConstraintSet.RIGHT)
-        set.applyTo(rowView)
-
-        // TODO: Add code to optionally add other columns
         return rowView
     }
 }
@@ -2224,6 +2243,15 @@
         }
     }
 
+    fun containerRefresh(cont: ListView)
+    {
+        waitOnUiThread {
+            val adapter: DWContainerAdapter = cont.adapter as DWContainerAdapter
+
+            adapter.notifyDataSetChanged()
+        }
+    }
+
     fun containerGetColumnType(cont: ListView, column: Int): Int
     {
         var type: Int = 0