Kotlin-android-extension类之间的通信类似于与其他片段进行通信

我有3个部分到我的项目:一个模型,做计算,一些片段,显示用户界面,并发送触发到我的第三部分,主要活动。 我做了所有我的片段与一些接口,如与其他片段通信 。

但是现在我需要模型的一部分来触发一些用户界面的变化。 我不知道该怎么做。 因为我的目标是让我的模型的一部分发送或触发一些函数,以便GUI得到更新,但它本身并不知道GUI。 (它是完全独立的)在主要活动中,我覆盖了所有的功能

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() }} 

片段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") } } } 

这就是你通常这样做,它工作正常。 现在我的问题是有办法做到这一点就像一个非片段类? 我尝试了这样的:

 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() } } 

但是,正如我所料,UITrigger强制转换不起作用。 (它总是捕捉一个例外)你有什么想法如何解决这个问题。 或者如何做呢? 理想情况下,我希望MimaFragment实现接口。 但是那也行不通。

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

所以,当我的模型完成一个步骤,它应该触发一些用户界面的变化。 我试图避免只是做一个循环,并根据他们的状态更新所有的元素,因为这将永远。 (虽然我认为这是我目前唯一的选择)

如果我不清楚,请告诉我,我会详细说明。