无论我做什么,eventbus 库都无法工作

问题描述 投票:0回答:1

我想使用eventbus库作为示例,但它不起作用,你觉得怎么样?

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btn1 = findViewById<Button>(R.id.button)

        btn1.setOnClickListener {

            EventBus.getDefault().post(SendEvent("Meara"))

            startActivity (  Intent ( this , ActivityOne::class.java ) )
        }
    }
}

上面广播事件总线的组件

class SendEvent( string : String) {

    var str : String = string
}

保存数据的类

终于有一个接收数据的组件了

class ActivityOne : AppCompatActivity() {

    private lateinit var txt : TextView

    override fun onCreate(savedInstanceState : Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_one)

        EventBus.getDefault().register(this)

        txt = findViewById(R.id.txt1)
    }

    override fun onDestroy() {

        EventBus.getDefault().unregister(this)

        super.onDestroy()
    }

    @Subscribe
    fun onEvent (event : SendEvent ) {

        txt.text = event.str
    }
}
java android android-studio kotlin greenrobot-eventbus
1个回答
0
投票

您正在做的是在没有事件监听器的情况下发送事件,因为您在发送事件后启动了 ActivityOne。 你应该做的是发布一个置顶事件:

EventBus.getDefault().postSticky(SendEvent("Meara"))

然后在接收端你应该监听粘性事件:

@Subscribe(sticky = true)
fun onEvent (event : SendEvent ) {

    txt.text = event.str
}    @Subscribe
fun onEvent (event : SendEvent ) {

    txt.text = event.str
}

这样你就可以监听事件。

已经太晚了,但我认为这个答案对新人会有一点帮助。

© www.soinside.com 2019 - 2024. All rights reserved.