Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/glung/elm-architecture-android
An example of the ELM architecture on Android using Kotlin with Anko
https://github.com/glung/elm-architecture-android
Last synced: 28 days ago
JSON representation
An example of the ELM architecture on Android using Kotlin with Anko
- Host: GitHub
- URL: https://github.com/glung/elm-architecture-android
- Owner: glung
- License: mit
- Created: 2015-10-18T13:55:15.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-05T19:04:50.000Z (about 8 years ago)
- Last Synced: 2024-08-03T11:01:36.060Z (4 months ago)
- Language: Kotlin
- Homepage:
- Size: 69.3 KB
- Stars: 59
- Watchers: 6
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-BigData - Elm Architecture in Android - An example Android application implemented with the Elm Architecture using the Kotlin programming language and Anko library. (Examples)
README
# elm-architecture-android
An example of the [ELM architecture](https://github.com/evancz/elm-architecture-tutorial/) applied to Android using [Kotlin](kotlinlang.org) with [Anko](https://github.com/JetBrains/anko).
# Activity
The [MainActivity](app/src/main/java/glung/elm_architecture/MainActivity.kt) defines a dispatch method (outside of its scope).
The `dispatch` method :
- `update` the model
- `render` a view for the updated model
- `setContentView` with the view representing the updated model.`onCreate` the activity initialize the system with an `INIT` action and a new `Model`.
```
public class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)dispatch(this)
}}
fun dispatch(activity: Activity, action: Action = Action.INIT, model: Model = Model()) {
val updatedModel = update(action, model)
val dispatch = dispatch(activity, updatedModel)activity.setContentView(view(activity, updatedModel, dispatch))
}fun dispatch(activity: Activity, model: Model) = { newAction: Action ->
dispatch(activity, newAction, model)
}```
# The Counter
All the application logic is in [Counter.kt](app/src/main/java/glung/elm_architecture/counter.kt).
The file
- declares the `Model`
- declares the `Action`
- implements the `update` function
- implements the `view` function```
sealed class Action {
object INIT : Action()object UP : Action()
object DOWN : Action()
}data class Model(val counter: Int = 0)
fun update(action: Action, model: Model): Model {
return when (action) {
is Action.INIT -> Model()
is Action.UP -> Model(model.counter + 1)
is Action.DOWN -> Model(model.counter - 1)
}
}fun view(context: Context, model: Model, dispatch : (Action) -> Unit): LinearLayout {
with(context) {
return verticalLayout {
button("up") {
onClick { dispatch(Action.UP) }
}
button("down") {
onClick { dispatch(Action.DOWN) }
}
textView(model.counter.toString())
}
}
}
```# Note
This is experimental and made for a talk. Feedback welcomed.
[@lungos](https://twitter.com/Lungos)