自己用的一些kotlin的资源,希望对大家有点帮助

教程氢电公敌 发表了文章 • 0 个评论 • 3134 次浏览 • 2016-08-27 23:01 • 来自相关话题

1. 如何评价 Kotlin 语言? 来自知乎,可以看看广大道友是如何评价这个新生代的,不过好不好用还是要看自己
2. Kotlin 官网 英文版,里面的东西很全,但是不是很详细,用来入门是没什么问题了
3. Kotlin 官网 - 中文版 这个和上面一样,只不过是中文的,有需要的可以看一看
4. Kotlin 中文翻译项目  这个在本人爬坑的时候也参考了一部分,只不过好像项目停止更新了
 
姑且先这么多吧,以后友好的资源再拿来分享(PS : 难道只有我一个人在吐槽不能用MD吗?) 查看全部
1. 如何评价 Kotlin 语言? 来自知乎,可以看看广大道友是如何评价这个新生代的,不过好不好用还是要看自己
2. Kotlin 官网 英文版,里面的东西很全,但是不是很详细,用来入门是没什么问题了
3. Kotlin 官网 - 中文版 这个和上面一样,只不过是中文的,有需要的可以看一看
4. Kotlin 中文翻译项目  这个在本人爬坑的时候也参考了一部分,只不过好像项目停止更新了
 
姑且先这么多吧,以后友好的资源再拿来分享(PS : 难道只有我一个人在吐槽不能用MD吗?)

关于kotlin资源

回复

技术LC_Lin 发起了问题 • 1 人关注 • 0 个回复 • 1983 次浏览 • 2016-06-11 22:35 • 来自相关话题

KBinding - 使用Kotlin实现的Android下的MVVM框架

技术benny 发表了文章 • 0 个评论 • 2880 次浏览 • 2015-12-17 17:32 • 来自相关话题

项目地址:https://github.com/BennyWang/KBinding
 
KBinding
Android View Model binding framework write in kotlin, base on anko, simple but powerful.ContentsBindingMode
OneWay: Binding from model to viewTwoWay: Binding from model to view and view to modelOneWayToSource: Binding from view to modelOneTime: Binding from model to view, and auto release after first emit
 Simple BindingverticalLayout {
editText {
bind { text("name", mode = TwoWay) }
}
button {
bind { click("hello") }
}
}
class SimpleViewModel() : ViewModel() {
var name: String by bindProperty("name") { "Jason" }
val hello: Command by bindCommand("hello") { params, canExecute ->
toast("Hello, ${name}!")
}
}Multiple Binding//login button enabled only when name and password not empty
class ArrayToBooleanConverter : MultipleConverter<Boolean> {
override fun convert(params: Array<Any>): Boolean {
params.forEach {
if(it.toString().isEmpty()) return false
}
return true
}
}
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") }
}
}
class LoginViewModel() : ViewModel() {
var name: String by bindProperty("name") { "xxx@xxxx.com" }
var password: String by bindProperty("password") { "xxxxxx" }
val login: Command by bindCommand("login") { params, canExecute ->
//login processing
}
}View Model property depends on other properties//name and price property will be updated when new stock is set
class StockViewModel() : ViewModel() {
var stock: Stock? by bindProperty("stock")
val name: String? by bindProperty("name", "stock") { stock!!.name }
val price: Float by bindProperty("price", "stock") { stock!!.price }
}Wait/Until//wait/until just like OneTime binding, but it need apply action, for example below, it wait for market from model, then decide how to display
relativeLayout {
wait { until("market", converter = viewOfMarket) { inflate(it, this@verticalLayout) }
}Extend Binding Property(Depend on RxBinding heavily)Event fun View.click(path: String) : PropertyBinding = commandBinding(path, clicks(), enabled())Propertyfun View.enabled(vararg paths: String, mode: OneWay = BindingMode.OneWay, converter: OneWayConverter<Boolean> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(enabled(), false, converter, *paths)


//this implements four binding mode for TextView, if just need OneWay mode, remove last three lines, some for other mode
fun TextView.text(vararg paths: String, mode: OneWay = BindingMode.OneWay, converter: OneWayConverter<out CharSequence> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(text(), false, converter, *paths)
fun TextView.text(vararg paths: String, mode: OneTime, converter: OneWayConverter<out CharSequence> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(text(), true, converter, *paths)
fun TextView.text(path: String, mode: OneWayToSource, converter: OneWayConverter<*> = EmptyOneWayConverter<String>()) : PropertyBinding = oneWayPropertyBinding(path, textChanges2(), convert)
fun TextView.text(path: String, mode: TwoWay, converter: TwoWayConverter<String, *> = EmptyTwoWayConverter<String, String>()) : PropertyBinding = twoWayPropertyBinding(path, textChanges2(), text(), converter)

Using with Gradledependencies {
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
  查看全部
项目地址:https://github.com/BennyWang/KBinding
 
KBinding
Android View Model binding framework write in kotlin, base on anko, simple but powerful.ContentsBindingMode
  • 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") }
}
}
class SimpleViewModel() : ViewModel() {
var name: String by bindProperty("name") { "Jason" }
val hello: Command by bindCommand("hello") { params, canExecute ->
toast("Hello, ${name}!")
}
}
Multiple Binding
//login button enabled only when name and password not empty
class ArrayToBooleanConverter : MultipleConverter<Boolean> {
override fun convert(params: Array<Any>): Boolean {
params.forEach {
if(it.toString().isEmpty()) return false
}
return true
}
}
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") }
}
}
class LoginViewModel() : ViewModel() {
var name: String by bindProperty("name") { "xxx@xxxx.com" }
var password: String by bindProperty("password") { "xxxxxx" }
val login: Command by bindCommand("login") { params, canExecute ->
//login processing
}
}
View Model property depends on other properties
//name and price property will be updated when new stock is set
class StockViewModel() : ViewModel() {
var stock: Stock? by bindProperty("stock")
val name: String? by bindProperty("name", "stock") { stock!!.name }
val price: Float by bindProperty("price", "stock") { stock!!.price }
}
Wait/Until
//wait/until just like OneTime binding, but it need apply action, for example below, it wait for market from model, then decide how to display
relativeLayout {
wait { until("market", converter = viewOfMarket) { inflate(it, this@verticalLayout) }
}
Extend Binding Property(Depend on RxBinding heavily)Event
    fun View.click(path: String) : PropertyBinding = commandBinding(path, clicks(), enabled())
Property
fun View.enabled(vararg paths: String, mode: OneWay = BindingMode.OneWay, converter: OneWayConverter<Boolean> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(enabled(), false, converter, *paths)    


//this implements four binding mode for TextView, if just need OneWay mode, remove last three lines, some for other mode
fun TextView.text(vararg paths: String, mode: OneWay = BindingMode.OneWay, converter: OneWayConverter<out CharSequence> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(text(), false, converter, *paths)
fun TextView.text(vararg paths: String, mode: OneTime, converter: OneWayConverter<out CharSequence> = EmptyOneWayConverter()) : PropertyBinding = oneWayPropertyBinding(text(), true, converter, *paths)
fun TextView.text(path: String, mode: OneWayToSource, converter: OneWayConverter<*> = EmptyOneWayConverter<String>()) : PropertyBinding = oneWayPropertyBinding(path, textChanges2(), convert)
fun TextView.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