KBinding 使用kotlin实现的Android MVVM框架
16lz
2021-01-23
项目地址:https://github.com/BennyWang/KBinding
KBinding
Android View Model binding framework write in kotlin, base on anko, simple but powerful.
Contents
BindingMode
OneWay: Binding from model to view
TwoWay: Binding from model to view and view to model
OneWayToSource: Binding from view to model
OneTime: Binding from model to view, and auto release after first emit
Simple Binding
verticalLayout{editText{bind{text("name",mode=TwoWay)}}button{bind{click("hello")}}}classSimpleViewModel():ViewModel(){varname:StringbybindProperty("name"){"Jason"}valhello:CommandbybindCommand("hello"){params,canExecute->toast("Hello,${name}!")}}
Multiple Binding
//loginbuttonenabledonlywhennameandpasswordnotemptyclassArrayToBooleanConverter:MultipleConverter<Boolean>{overridefunconvert(params:Array<Any>):Boolean{params.forEach{if(it.toString().isEmpty())returnfalse}returntrue}}verticalLayout{editText{bind{text("name",mode=TwoWay)}}editText{bind{text("password",mode=TwoWay)}}button{bind{enabled("name","password",mode=OneWay,converter=ArrayToBooleanConverter())}bind{click("login")}}}classLoginViewModel():ViewModel(){varname:StringbybindProperty("name"){"xxx@xxxx.com"}varpassword:StringbybindProperty("password"){"xxxxxx"}vallogin:CommandbybindCommand("login"){params,canExecute->//loginprocessing}}
View Model property depends on other properties
//nameandpricepropertywillbeupdatedwhennewstockissetclassStockViewModel():ViewModel(){varstock:Stock?bybindProperty("stock")valname:String?bybindProperty("name","stock"){stock!!.name}valprice:FloatbybindProperty("price","stock"){stock!!.price}}
Wait/Until
//wait/untiljustlikeOneTimebinding,butitneedapplyaction,forexamplebelow,itwaitformarketfrommodel,thendecidehowtodisplayrelativeLayout{wait{until("market",converter=viewOfMarket){inflate(it,this@verticalLayout)}}}
Extend Binding Property(Depend on RxBinding heavily)
Event
funView.click(path:String):PropertyBinding=commandBinding(path,clicks(),enabled())
Property
funView.enabled(varargpaths:String,mode:OneWay=BindingMode.OneWay,converter:OneWayConverter<Boolean>=EmptyOneWayConverter()):PropertyBinding=oneWayPropertyBinding(enabled(),false,converter,*paths)//thisimplementsfourbindingmodeforTextView,ifjustneedOneWaymode,removelastthreelines,someforothermodefunTextView.text(varargpaths:String,mode:OneWay=BindingMode.OneWay,converter:OneWayConverter<outCharSequence>=EmptyOneWayConverter()):PropertyBinding=oneWayPropertyBinding(text(),false,converter,*paths)funTextView.text(varargpaths:String,mode:OneTime,converter:OneWayConverter<outCharSequence>=EmptyOneWayConverter()):PropertyBinding=oneWayPropertyBinding(text(),true,converter,*paths)funTextView.text(path:String,mode:OneWayToSource,converter:OneWayConverter<*>=EmptyOneWayConverter<String>()):PropertyBinding=oneWayPropertyBinding(path,textChanges2(),converter)funTextView.text(path:String,mode:TwoWay,converter:TwoWayConverter<String,*>=EmptyTwoWayConverter<String,String>()):PropertyBinding=twoWayPropertyBinding(path,textChanges2(),text(),converter)
Using with Gradle
dependencies{compile'com.benny.kbinding:library:0.1.0'}
Contribute
Now is just the beginning of KBinding, so everyone interested in this library, just fork it and pull requests to me. Let's make it a little better.
Discussion
QQ Group: 516157585
更多相关文章
- [Android] 无法创建项目问题解决
- Android已有项目接入Flutter及互相通信
- android:打开Eclipse之后android项目都报错怎么解决
- MVVM模式开源学习项目——玩Android客户端
- 修改android项目sdk版本的方法
- android工程项目导入问题汇…
- Android常用开源项目