Kotlin - 从对象调用类方法

Nic*_*Coe 1 android kotlin kotlin-reflect

将尽可能简洁地保持这个......

我想在我的MainActivty类中有一个方法,比如updateUI().

我有另一个文件是一个名为FBManager的对象.该对象基本上拥有"静态"firebase访问方法..让我们说signInUser()

从Activity我调用FBManager.signInUser()...它做了一些逻辑并通过2个私有方法移动,在最后一个私有方法中,我想基本上调用MainActivity.updateUI()...

这不能完成,因为kotlin没有静态方法,并且不能使updateUI()静态.MainActivity().updateUI()编译但不正确,并且不想实例化新的MainActivity.最后,我想把活动传递给第一个构造函数,比如FBManager.signInUser(this)......但是在signInUser()之后,它会转到一个覆盖方法,它只能将一个包作为一个可选输入(我不是相信你可以把活动放到一个包中),因此我无法将活动引用传递给最终的私有方法.....

编辑:进一步阐述

object FBManager {

fun signInUser() {
// Create intent
startActivityForResult(intent)
}

override fun onActivityResult(some intent stuff) {
//Try catch block. In try block call
firebaseAuth(Google account)
}

fun firebaseAuth(acct: GoogleSignInAccount) {
//More logic and an .onCompleteListener

// Inside .onCompeteListener, which is the problem....
MainActivity.updateUI()
}
}
Run Code Online (Sandbox Code Playgroud)

为布局道歉......在我的手机上打字......

- 编辑 -

我希望所有这些都有意义,因为我是编程新手,并且发现很难解释我的问题(因为如果我真的理解它们,我可以想出一个解决方案......)

那么根据标题,还有其他方法可以做到这一点......从一个对象FBManager调用MainActivity中的方法吗?

小智 7

这个例子怎么样?活动

class ExampleActivity : AppCompatActivity() {

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

        FBManager.signInUser {
            updateUI()
        }
    }

    private fun updateUI() {
        // update UI
    }
}
Run Code Online (Sandbox Code Playgroud)

和FBManager对象

object FBManager {
    fun signInUser(callback: () -> Unit) {
        // do work and then
        callback()
    }
}
Run Code Online (Sandbox Code Playgroud)