Skip to content

Instantly share code, notes, and snippets.

View longv's full-sized avatar
:shipit:
On a mission to be blazingly fast

Long Vu longv

:shipit:
On a mission to be blazingly fast
View GitHub Profile
@longv
longv / DataBindingEntry.kt
Last active February 1, 2021 22:26
DataBindingEntry for data binding RecyclerView
data class DataBindingEntry(
@LayoutRes val layoutId: Int,
val bindings: Map<Int, Any?>
)
@longv
longv / DataBindingViewHolder.kt
Last active February 1, 2021 22:28
DataBindingViewHolder for data binding RecyclerView
class DataBindingViewHolder(private val viewBinding: ViewDataBinding): RecyclerView.ViewHolder(viewBinding.root) {
fun bind(bindingEntry: DataBindingEntry) {
viewBinding.apply {
bindingEntry.bindings.forEach { setVariable(it.key, it.value) }
}
}
}
@longv
longv / DataBindingAdapter.kt
Last active February 1, 2021 22:52
DataBindingAdapter for data binding RecyclerView
class DataBindingAdapter(private var bindingEntries: List<DataBindingEntry> = emptyList())
: RecyclerView.Adapter<DataBindingViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DataBindingViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val viewBinding = DataBindingUtil.inflate<ViewDataBinding>(layoutInflater, viewType, parent, false)
return DataBindingViewHolder(viewBinding)
}
override fun onBindViewHolder(holder: DataBindingViewHolder, position: Int) {
@longv
longv / BindingAdapters.kt
Created November 3, 2019 09:32
Binding attributes for data binding RecyclerView
package me.longv.pokedex.databinding
import androidx.databinding.BindingAdapter
import androidx.recyclerview.widget.RecyclerView
@BindingAdapter(value = ["model"])
fun setupRecyclerView(view: RecyclerView, model: RecyclerViewModel?) {
model?.apply {
view.adapter = DataBindingAdapter(bindingEntries)
view.layoutManager = layoutManager
@longv
longv / main_item_list.xml
Created November 3, 2019 09:42
Usage of model attribute in data binding RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="listModel"
type="androidx.lifecycle.LiveData&lt;me.longv.pokedex.databinding.RecyclerViewModel>"/>
</data>
fun debugSubscribeOn(): Disposable =
Observable.just(1, 2, 3)
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
.subscribeOn(Schedulers.io())
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
.subscribe()
fun debugSubscribeOn(): Disposable =
Observable.just(1, 2, 3)
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.computation())
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
fun debugSubscribeOn(): Disposable =
Observable.just(1)
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
.subscribeOn(Schedulers.io())
.flatMap {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
Observable.just(it)
.subscribeOn(Schedulers.computation())
fun debugSubscribeOn(): Disposable =
Observable.just(1)
.doOnNext {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
}
.subscribeOn(Schedulers.io())
.flatMap {
println(Thread.currentThread().name) // RxCachedThreadScheduler-1
Observable.just(it)
.doOnNext {
class MainActivity {
// ...
private val viewModel by viewModels { viewModelFactory }
private lateinit var adapter: DataBindingAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)