我在主要活动中定义了一个按钮,它将说出一个字符串值。当我点击按钮时 它说出字符串值。我还有一个在另一个非活动中定义的广播接收器 类(KOTLIN 类)。 收到广播后,我想模拟主活动中的按钮单击,以便我可以 说出不同的信息。我在 android studio 中使用 kotlin。
我的所有代码都有效。我只需要知道如何从另一个类触发主活动按钮。
我希望这是可能做到的。
我尝试从非活动类调用按钮
callonclick()
,它使应用程序崩溃。
我可以从 mainactivity 类中调用按钮
callonclick()
,它工作得很好。
所以我正在做的是从另一个类调用 mainActivity 类中的
clickButton()
函数。
在我的非活动课程中,我有以下代码:
var mActivity = MainActivity()
mActivity.clickButton() // calling the onclick function in the Main act
上面的语句到达onclick函数然后崩溃 当执行
btnSpeak!!.callOnClick()
语句时。
这里是mainactivity类中的onclick函数
public fun clickButton() {
println("IN ClickButton *********************************")
btnSpeak!!.callOnClick()
}
当我单击 mainactivity 类中的按钮时,onclick 函数可以正常工作并说出我的消息。
据我了解,您想接收广播,收到广播后您想单击一个按钮。
首先,您无法手动创建 Activity 的新实例。仅由意图触发的活动。
但是您已经在里面了
MainActivity
,因此您不需要导航到它或创建该活动的新实例来访问其方法。
您所需要的是:
创建
interface
:
interface MyBroadcastListener {
fun click()
}
在您的活动中实施它:
class MainActivity : AppCompatActivity(), MyBroadcastListener {
...
override fun click() {
btnSpeak?.callOnClick()
}
}
然后,将侦听器作为接收者构造函数参数传递:
class MyReceiver(private val listener: MyBroadcastListener) : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
listener.click()
}
}
在
MainActivity
中注册接收者的地方将 this
作为构造函数参数:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val receiver = MyReceiver(this)
// TODO: register receiver
}