diff options
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices')
3 files changed, 32 insertions, 6 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt index 4cfd6b5..0fbf597 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt @@ -20,6 +20,7 @@ package mx.trackermap.TrackerMap.android.devices import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.updateLayoutParams +import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitItemBinding @@ -28,10 +29,18 @@ import mx.trackermap.TrackerMap.android.shared.UnitRenderData import mx.trackermap.TrackerMap.client.models.UnitInformation class DevicesAdapter( - private val units: List<UnitInformation>, + private val units: MutableList<UnitInformation>, private val actionCallback: ActionCallback? ) : RecyclerView.Adapter<DevicesAdapter.ViewHolder>() { + fun setData(units: List<UnitInformation>) { + val diffCallback = DevicesDiffCallback(this.units, units) + val diffResult = DiffUtil.calculateDiff(diffCallback) + this.units.clear() + this.units.addAll(units) + diffResult.dispatchUpdatesTo(this) + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val binding = UnitItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesDiffCallback.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesDiffCallback.kt new file mode 100644 index 0000000..40e6e9c --- /dev/null +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesDiffCallback.kt @@ -0,0 +1,20 @@ +package mx.trackermap.TrackerMap.android.devices + +import androidx.recyclerview.widget.DiffUtil +import mx.trackermap.TrackerMap.client.models.UnitInformation + +class DevicesDiffCallback( + private val oldList: List<UnitInformation>, + private val newList: List<UnitInformation> +): DiffUtil.Callback() { + override fun getOldListSize() = oldList.size + + override fun getNewListSize() = newList.size + + override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = + oldList[oldItemPosition].device.id == newList[newItemPosition].device.id + + override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) = + (oldList[oldItemPosition].position?.id == newList[newItemPosition].position?.id) && newItemPosition != 0 + +}
\ No newline at end of file diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt index ad93429..e5143cb 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt @@ -83,7 +83,7 @@ class DevicesFragment : Fragment() { context, LinearLayoutManager.VERTICAL, false ) - binding.devicesList.adapter = DevicesAdapter(emptyList(), null) + binding.devicesList.adapter = DevicesAdapter(mutableListOf(), this::itemAction) binding.infoLoading.root.visibility = View.VISIBLE } @@ -93,10 +93,7 @@ class DevicesFragment : Fragment() { unitsViewModel.units.observe(viewLifecycleOwner) { units -> Log.d("DevicesFragment", "Success $units") binding.infoLoading.root.visibility = View.GONE - binding.devicesList.swapAdapter( - DevicesAdapter(units, this::itemAction), - false - ) + (binding.devicesList.adapter as DevicesAdapter).setData(units) } } |