Skip to content

Instantly share code, notes, and snippets.

@radityagumay
Last active November 11, 2017 12:42
Show Gist options
  • Save radityagumay/8d5c9d899a8606f23025253654390506 to your computer and use it in GitHub Desktop.
Save radityagumay/8d5c9d899a8606f23025253654390506 to your computer and use it in GitHub Desktop.
Fragment Navigation Pattern
interface DataSourceBase
class DataSource {
companion object {
private var sInstance: DataSource? = null
private var LOCK = Any()
fun getInstance(): DataSource? {
synchronized(LOCK) {
if (sInstance == null) {
sInstance = DataSource()
}
}
return sInstance
}
}
private var map: WeakHashMap<Any, DataSourceBase> = WeakHashMap()
fun <R : DataSourceBase> push(key: Any, data: R?) {
data?.let {
map.put(key, data)
}
}
@Suppress("UNCHECKED_CAST")
fun <R : DataSourceBase> peek(key: Any): R? {
return map[key] as? R?
}
@Suppress("UNCHECKED_CAST")
fun <R : DataSourceBase> pop(key: Any): R? {
val data = map[key] as R
map.remove(key)
return data
}
fun remove(key: Any) {
map.remove(key)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment