如何从另一个 class 中的 MainActivity 获取值

How to pick up values from MainActivity in another class

我认为将冗长的函数放在 MainActivity 以外的 class 中是个好主意。但是,我很难在单独的 class.

中使用 MainActivity 中的值

为了测试这个,我将 MainActivity 作为

package com.example.separateclasstest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {

    var mName = ""
    var mRadius = 0


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

        mName = "Mary"
        mRadius = 50

        Log.i("sct","Name in Main: $mName")
        Log.i ("sct", "Radius in Main: $mRadius")

        SupportRoutines().supportFunction()
    }
}

和SupportRoutines.kt

package com.example.separateclasstest

import android.util.Log

class SupportRoutines {
    var mSupportName = ""
    var mSupportRadius = 0

    fun supportFunction() {
        mSupportName = MainActivity().mName
        mSupportRadius = MainActivity().mRadius
        Log.i("sct", "Name in 2nd class: $mSupportName")
        Log.i ("sct", "Radius in 2nd class: $mSupportRadius")
    }

}

我运行这个的时候没有报错但是SupportRoutines接收到的字符串变量是空字符串,整型变量为0,如LogCat:

2020-06-12 16:22:31.326 11393-11393/com.example.separateclasstest I/sct: Name in Main: Mary
2020-06-12 16:22:31.326 11393-11393/com.example.separateclasstest I/sct: Radius in Main: 50
2020-06-12 16:22:31.327 11393-11393/com.example.separateclasstest I/sct: Name in 2nd class: 
2020-06-12 16:22:31.328 11393-11393/com.example.separateclasstest I/sct: Radius in 2nd class: 0

如何正确引用 MainActivity 的成员?

永远不要 自己创建一个 activity 的实例,就像您在 SupportRoutines 中所做的那样。要么将您的 MainActivity 实例作为参数传递给 supportFunction(),要么将名称和半径作为单独的参数传递给 supportFunction().