KotlinAndroidViewBindings

Additional

Language
Kotlin
Version
0.12 (Dec 16, 2017)
Created
Apr 20, 2017
Updated
Jun 17, 2018
Owner
Marcin Moskała (MarcinMoskala)
Contributor
Marcin Moskała (MarcinMoskala)
1
Activity
Badge
Generate
Download
Source code

Show card

KotlinAndroidViewBindings

Bindings for properties with Kotlin types (Boolean, String) to layout traits (visibility, text).

Library allows to bind properties of basic types (String, Int, functional) to view element properties. Example:

var email: String by bindToTextView(R.id.emailView)
val emailRequestFocus: ()->Unit by bindToRequestFocus(R.id.emailView)
var emailErrorId: Int? by bindToErrorId(R.id.emailView)

This allows to make clear and simple MVP. Example:

LoginView.kt

interface LoginView {
    var progressVisible: Boolean
    
    var email: String
    val emailRequestFocus: ()->Unit
    var emailErrorId: Int?
 
    var password: String
    val passwordRequestFocus: ()->Unit
    var passwordErrorId: Int?
    
    var loginButtonClickedCallback: ()->Unit
}

LoginActivity.kt

class LoginActivity : AppCompatActivity(), LoginView {
    
    override var progressVisible by bindToLoading(R.id.progressView, R.id.loginFormView)
    
    override var email by bindToTextView(R.id.emailView)
    override val emailRequestFocus by bindToRequestFocus(R.id.emailView)
    override var emailErrorId by bindToErrorId(R.id.emailView)
    
    override var password by bindToTextView(R.id.passwordView)
    override val passwordRequestFocus by bindToRequestFocus(R.id.passwordView)
    override var passwordErrorId by bindToErrorId(R.id.passwordView)
    
    override var loginButtonClickedCallback by bindToClick(R.id.loginButton)
    
    //...
}

Presenter.kt

class LoginPresenter(val view: LoginView) {

    fun onCreate() {
        view.loginButtonClickedCallback = { attemptLogin() }
    }
    
    //...
}

This makes presenters fully unit-testable while keeping Activities short and simple. Full example here. Library usage in wider context here.

Installation

To add KotlinAndroidViewBindings to the project, add to build.gradle file:

dependencies {
    implementation 'com.github.MarcinMoskala:KotlinAndroidViewBindings:0.12'
}

While library is located on JitPack, remember to add to module build.gradle (unless you already have it):

repositories {
    maven { url 'https://jitpack.io' }
}

Media

Other libraries

If you like it, remember to leave the star and check out my other libraries:

  • ActivityStarter - Simple Android Library, that provides easy way to start and save state of Activities, Fragments, Services and Receivers with arguments.
  • PreferenceHolder - Library for simple SharedPreference management in Kotlin
  • ArcSeekBar - Good looking curved Android SeekBar
  • VideoPlayView - Custom Android view with video player, loader and placeholder image

License

Copyright 2017 Marcin Moskała

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.