AndroidはKotlinプロパティを使用してエンティティクラスの別の書き方を傍受し、値の変更を適用し、UIのリフレッシュ、メッセージングを行う.
常にステータスのリフレッシュをしている同僚は、最もよくEventBusやRxAndroidを使ってページをリフレッシュします.ページをリフレッシュするとき、少し煩わしいことがあります.私がやっているのは、新しい発見で、属性でページの状態を変えて、少しReat-Nativeしたいと思っています.propの言うステータスマシンは少し似ています.
実験操作は以下の通りである.
1.エンティティクラスを作成し、activityを作成します.1つのインタフェース
1)コネクタ
2)
3)
4) MainActivity.kt
observableの実行(v:View)
observable 1の実行(v:View)
初期値表示
テストの結果、送信は1つのactivityで、別のactivityをリフレッシュすることができます.
たとえば、新しいactivityを作成し、次のコードを実行すると、前のページのTextViewをリフレッシュできます.
プロセスをまたぐ髪面についてはまだ試したことがあり、探究しなければならない.
実験操作は以下の通りである.
1.エンティティクラスを作成し、activityを作成します.1つのインタフェース
1)コネクタ
EntityListener.kt
interface EntityListener {
fun afterChange(oldValue: Any, newValue: Any)
}
2)
BaseEntity.kt
package com.example.chenkui.myapplication.entity
import com.example.chenkui.myapplication.lister.EntityListener
open class BaseEntity {
var entityListener: EntityListener? = null
/**
* ,
*
*/
inline fun onChange(crossinline onChange: (oldValue: Any, newValue: Any) -> Unit) {
this.entityListener = object : EntityListener {
override fun afterChange(oldValue: Any, newValue: Any) = onChange(oldValue, newValue)
}
}
/**
* ,
*
*/
internal fun onChangeCall(onChange: () -> Unit) {
this.entityListener = object : EntityListener {
override fun afterChange(oldValue: Any, newValue: Any) = onChange()
}
}
/**
*
* var obserableProp: String by Delegates.observable(" ") { prop, old, new ->
* call(old, new)
* }
*
*/
internal fun call(oldValue: Any, newValue: Any) {
if (entityListener != null) {
entityListener!!.afterChange(oldValue, newValue)
}
}
}
3)
TestEntity.kt
package com.example.chenkui.myapplication.entity;
import kotlin.properties.Delegates
class TestEntity : BaseEntity() {
companion object {
var testEntity = TestEntity()
}
/**
*
* //prop lambda
* //old
* //new
*/
var obserableProp: String by Delegates.observable(" ") { prop, old, new ->
call(old, new)
println("===$prop== ====$old== ==$new==")
}
var vetoableProp: Int by Delegates.vetoable(20) {
prop, old, new ->
call(old, new)
println("===$prop== ====$old== ==$new==")
new > old
}
}
4) MainActivity.kt
var testEntity = TestEntity.testEntity
public fun observable(v: View) {
testEntity.onChangeCall {
(v as TextView).text = testEntity.obserableProp
}
testEntity.obserableProp = "hello"
}
public fun observable1(v: View) {
Toast.makeText(this, "test", Toast.LENGTH_LONG).show()
testEntity.obserableProp = " "
}
observableの実行(v:View)
observable 1の実行(v:View)
初期値表示
" " "hello"
初期値「hello」を「1回変更」に変更テストの結果、送信は1つのactivityで、別のactivityをリフレッシュすることができます.
たとえば、新しいactivityを作成し、次のコードを実行すると、前のページのTextViewをリフレッシュできます.
TestEntity.testEntity.obserableProp = "Main2Activity"
プロセスをまたぐ髪面についてはまだ試したことがあり、探究しなければならない.