-
-
Save WindSekirun/ece09a7291a28e248cada316dab3d9df to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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