Skip to content

Instantly share code, notes, and snippets.

View igorwojda's full-sized avatar

Igor Wojda igorwojda

View GitHub Profile
@igorwojda
igorwojda / KotlinViewModelProvider.kt
Created January 7, 2019 07:39
Kotlin ViewModelProvider
class KotlinViewModelProvider {
companion object {
inline fun <reified T : ViewModel> of(fragment: Fragment, crossinline factory: () -> T): T {
@Suppress("UNCHECKED_CAST")
val vmFactory = object : ViewModelProvider.Factory {
override fun <U : ViewModel> create(modelClass: Class<U>): U = factory() as U
}
return ViewModelProviders.of(fragment, vmFactory)[T::class.java]
class Person {
var age: Int = 0
}
//Usage
val person = Person()
person.age = 20
println(person.age) //prints 20
class Person {
private var age: Int = 0
fun getAge(): Int {
return age
}
fun setAge(age: Int) {
this.age = age
}
val view = View()
view.beforeTextChangedListener = { /* do something */ }
class View {
var beforeTextChangedListener: (() -> Unit)? = null
var afterTextChangedListener: (() -> Unit)? = null
var onTextChangedListener: (() -> Unit)? = null
}
val view = View()
view.setBeforeTextChangedListener ({ /* do something */ })
//...
// later in code we can set another listener
view.setAfterTextChangedListener ({ /* do something */ })
//no need to set 3rd listener
public interface TextWatcher {
public void beforeTextChanged(CharSequence s, int start,
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable s);
}
val view = View()
view.setBeforeTextChangedListener { /* do something */ }
//...
// later in code we can set another listener
view.setAfterTextChangedListener { /* do something */ }
//no need to set 3rd listener
class View {
private var beforeTextChangedListener: (() -> Unit)? = null
private var afterTextChangedListener: (() -> Unit)? = null
private var onTextChangedListener: (() -> Unit)? = null
fun setBeforeTextChangedListener(listener: () -> Unit) {
beforeTextChangedListener = listener
}
fun setAfterTextChangedListener(listener: () -> Unit) {
textView.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
//do something
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//do something
}