Extender apropiadamente una class de Widget usando Kotlin

El siguiente código básicamente cambia el estado de un widget de button:

enum class State { unable, enable } fun configureState(currentState:State, button:Button ,colorInt :Int = Color.BLACK) = when (currentState) { State.unable -> { button.isClickable = false button.setBackgroundColor(Color.LTGRAY) button.setTextColor(Color.WHITE) } State.enable -> { button.isClickable = true button.setBackgroundColor(colorInt) button.setTextColor(Color.WHITE) } } 

El objective es extender el widget de botones y evitar la repetición del código dentro de todas mis actividades.

Sí, es fácil simplemente extender a través de la function, si no tuve el enum State , haciendo algo como esto:

 fun Button.configureState(state:Int) = when(state) { 0 -> { //do unable stuff } 1 -> { // do enable stuff } else -> { // do nada } } 

Mi pregunta sería cuál es la forma correcta de extender con el estado de enum donde podría acceder a través de la function de extensión, por ejemplo:

 fun Button.configureWith(state: this.State) = when (state) { this.State.unable -> { } this.State.enable -> { } } 

PD nuevamente: soy nuevo en Kotlin :), cualquier idea … bienvenido 🙂

Su código trata al State como un parámetro para cambiar el estado del button solamente. No es necesario declararlo dentro de la subclass de Button. Puede declararlo fuera de él con una function de extensión.

 enum class ButtonState { unable, enable } fun Button.configureWith(state: ButtonState, colorInt: Int = Color.BLACK) = when (state) { ButtonState.unable -> { clickable = false setBackgroundColor(Color.LTGRAY) } ButtonState.enable -> { clickable = true setBackgroundColor(colorInt) } } 
  • Kotlin delega con Room persistence lib
  • Cómo restablecer FrameLayout o eliminar el caching de layout
  • getFragmentManager () no funciona en Kotlin
  • Cómo crear una list con un argumento genérico en Kotlin
  • ¿Cómo puedo hacer que kotlin se dé count de que esta function de comparación de BST es recursiva de queue?
  • Combinación eficiente de map y filter contra stdlibs
  • Sitio de Android con RxJava manejar resultado de consulta vacío
  • ¿Hay alguna diferencia entre "object receptor" y "receptor de extensión"
  • Afirmación con post de error en Kotin
  • No se puede establecer OnItemClickListener for spinner en Android
  • ¿Cómo crear un IntArray de tamaño fijo e inicializar el array más adelante en Kotlin?