项目地址: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


更多相关文章

  1. [Android] 无法创建项目问题解决
  2. Android已有项目接入Flutter及互相通信
  3. android:打开Eclipse之后android项目都报错怎么解决
  4. MVVM模式开源学习项目——玩Android客户端
  5. 修改android项目sdk版本的方法
  6. android工程项目导入问题汇…
  7. Android常用开源项目

随机推荐

  1. SEAndroid和普通android的区别
  2. Android用户界面设计:布局基础
  3. Android(安卓)上,用普通的 am-linux-gcc
  4. Android(安卓)5.0+ 自定义普通按钮的ripp
  5. u3d与android通信1
  6. Android自动接听和挂断电话实现原理
  7. android与Web服务器交互时的cookie使用-
  8. Android(安卓)Developers:向其它应用发送
  9. android Paint和Color类介绍 使用示例
  10. Android(安卓)万能适配器 节省你的开发时