You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MainActivity.kt中调用Waves.kt内的函数?

解决方案

首先明确核心问题:你想调用的clear()函数操作的是Waves类实例的成员变量(amplitudes、spikes)和实例方法(invalidate()),这类函数不能直接通过类名Waves.clear()调用,必须通过Waves的具体实例对象调用。

步骤1:修正Waves.kt中的函数定义

确保clear()是Waves类的实例成员函数(因为要操作实例状态),完整代码示例:

class Waves(context: Context, attrs: AttributeSet?) : View(context, attrs) {
    // 假设这是你的实例变量定义
    private var amplitudes = ArrayList<Float>()
    private var spikes = ArrayList<Any>() // 根据实际业务替换类型

    // 定义实例成员函数clear()
    fun clear(): ArrayList<Float> {
        val amps = amplitudes.clone() as ArrayList<Float>
        amplitudes.clear()
        spikes.clear()
        invalidate()
        return amps
    }
}

步骤2:在MainActivity.kt中调用函数

先获取Waves的实例(通常从布局中获取),再调用其clear()方法:

class MainActivity : AppCompatActivity() {
    private lateinit var wavesView: Waves

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 从布局中找到Waves控件实例
        wavesView = findViewById(R.id.waves_view)
        
        // 调用实例的clear()方法
        amplitudes = wavesView.clear()
    }
}

为什么不能用Waves.clear()?

如果强行要通过类名调用,需要把amplitudes、spikes改成静态变量,同时处理invalidate()的调用逻辑,但这违背了Android View组件的状态管理设计——每个View实例都有自己的状态,静态变量会导致所有Waves实例共享同一状态,大概率不符合你的业务需求。

内容的提问来源于stack exchange,提问作者Islamic Clips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:34:58