如何模拟 kotlin 中另一个类的按钮点击

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

我在主要活动中定义了一个按钮,它将说出一个字符串值。当我点击按钮时 它说出字符串值。我还有一个在另一个非活动中定义的广播接收器 类(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 函数可以正常工作并说出我的消息。

kotlin emulation
1个回答
0
投票

据我了解,您想接收广播,收到广播后您想单击一个按钮。

首先,您无法手动创建 Activity 的新实例。仅由意图触发的活动。

但是您已经在里面了

MainActivity
,因此您不需要导航到它或创建该活动的新实例来访问其方法。

您所需要的是:

  1. 创建

    interface

    interface MyBroadcastListener {
        fun click()
    }
    
  2. 在您的活动中实施它:

    class MainActivity : AppCompatActivity(), MyBroadcastListener {
         ...
    
         override fun click() {
             btnSpeak?.callOnClick()
         }
    }
    
  3. 然后,将侦听器作为接收者构造函数参数传递:

    class MyReceiver(private val listener: MyBroadcastListener) : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            listener.click()
        }
    }
    
  4. MainActivity
    中注册接收者的地方将
    this
    作为构造函数参数:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        val receiver = MyReceiver(this)
        // TODO: register receiver
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.