Skip to content

Instantly share code, notes, and snippets.

@WindSekirun
Created February 27, 2019 04:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save WindSekirun/ece09a7291a28e248cada316dab3d9df to your computer and use it in GitHub Desktop.
Save WindSekirun/ece09a7291a28e248cada316dab3d9df to your computer and use it in GitHub Desktop.
class ItemChangedList<T> : ArrayList<T>() {
private val _changedObserverList = ArrayList<OnPropertyChangedObserver>()
val isReadOnly: Boolean
get() = false
override fun add(element: T): Boolean {
sendPropertyChanged(element, ITEM_ADDED)
return super.add(element)
}
override fun iterator(): MutableIterator<T> {
return super.iterator()
}
override fun clear() {
for (item in this) {
sendPropertyChanged(item, ITEM_REMOVED)
}
super.clear()
}
override operator fun contains(element: T): Boolean {
return super.contains(element)
}
override fun remove(element: T): Boolean {
sendPropertyChanged(element, ITEM_REMOVED)
return super.remove(element)
}
override fun indexOf(element: T): Int {
return super.indexOf(element)
}
override fun get(index: Int): T {
return super.get(index)
}
override fun set(index: Int, element: T): T {
return super.set(index, element)
}
override fun removeAt(index: Int): T {
return super.removeAt(index)
}
fun copyTo(array: Array<T>, arrayIndex: Int) {
addAll(array.toList().drop(arrayIndex))
}
fun count(): Int {
return super.size
}
fun insert(index: Int, item: T) {
sendPropertyChanged(item, ITEM_ADDED)
super.add(index, item)
}
fun addObserver(observer: OnPropertyChangedObserver) {
_changedObserverList.add(observer)
}
fun removeObserver(observer: OnPropertyChangedObserver) {
_changedObserverList.remove(observer)
}
fun clearObserver() {
_changedObserverList.clear()
}
private fun sendPropertyChanged(item: Any?, args: String) {
for (observer in _changedObserverList) {
observer.onChanged(item, args)
}
}
interface OnPropertyChangedObserver {
fun onChanged(item: Any?, args: String)
}
companion object {
const val ITEM_ADDED = "bbed36af-0b7b-4e53-abc9-02d6a14d7f34"
const val ITEM_REMOVED = "7390116e-586d-4e62-9343-5b82b0a8c6c5"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment