Comunicación de extensión Kotlin-android entre classs similar a la comunicación con otros fragments

Tengo 3 partes para mi proyecto: un model que hace cálculos, algunos fragments que muestran la interfaz de usuario y envían el disparador a mi tercera parte, la actividad principal. Hice todos mis Fragmentos con algunas interfaces como Comunicarse con Otros Fragmentos .

Sin embargo, ahora necesito una de las partes de mi Modelo para activar algunos cambios en la UI. Y no sé cómo hacer eso. Porque mi objective es que una parte de mi Modelo envíe o active algunas funciones para que la GUI se actualice pero no conozca la GUI por sí misma. (es totalmente independiente) En Actividad principal anulo todas las funciones

class MainActivity : AppCompatActivity(), MimaFragment.elementSelectedListener, InstructionFragment.instructionSaveButtonClickedCallback , OptionFragment.optionSaveButtonClickedCallback, MimaFragment.UITrigger{ override fun abortOptions() { extendNormal() } override fun updateMima() { mimaFragment.updateView() } override fun normal() { mimaFragment.drawArrows() }} 

Fragmento exapmle:

 class OptionFragment : Fragment() { var optionCallback : optionSaveButtonClickedCallback? = null interface optionSaveButtonClickedCallback{ fun updateMima() fun abortOptions() } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { view?.findViewById(R.id.optionsAbort)?.setOnClickListener{ optionCallback?.abortOptions() } } override fun onAttach(context: Context?) { super.onAttach(context) try { optionCallback = context as optionSaveButtonClickedCallback } catch (e : ClassCastException){ throw ClassCastException(activity.toString() + " must implementoptionSaveButtonClickedCallback") } } } 

Así es como usualmente lo haces y funciona bien. Ahora, para mi Pregunta, ¿hay alguna manera de hacerlo así para una class que no sea Fragmento? Lo intenté así:

 class MimaModul(name: String, description : String, context: Context) : Element(name, description) { val uiTrigger : UITrigger? = null init{ try { uiTrigger = context as UITrigger } catch (e : ClassCastException){ Log.d("ClassCastException","Didn't implement uiTrigger") } } fun step(){ //it does some stuff here and then calls for example uiTrigger?.normal() } interface UITrigger{ fun normal() } } 

Sin embargo, como esperaba, el reparto de UITrigger no funciona. (siempre capta una exception) ¿Tiene alguna idea de cómo resolver esto? ¿O cómo hacerlo? idealmente quiero que MimaFragment implemente la interfaz. Pero eso tampoco funcionó.

 class MimaFragment : Fragment(), MimaModul.UITrigger { //other stuff override fun normal() { drawArrows() } } 

Entonces, cuando mi Modelo termine con un paso, debería desencadenar algún cambio en la UI. Y traté de evitar simplemente hacer un ciclo y actualizar todos los elementos en function de su estado porque eso llevaría una eternidad. (Aunque veo esto como mi única opción en este momento)

Avíseme si no estaba claro y elaboraré.