从导体控制器获取 activity

get activity from conductor controller

我正在使用 conductor,我想在其中初始化 GoogleApiClient。 正如 conductor 文档中所述,Conductor 是为替换 Fragment 而制作的。在 Fragment 我可以很容易地得到一个 activity。在 conductor?

中有办法解决这个问题吗?
class SignInController : Controller(), GoogleApiClient.OnConnectionFailedListener {

    private lateinit var mGoogleApiClient: GoogleApiClient
    private lateinit var mFirebaseAuth: FirebaseAuth

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View {
        val view = inflater.inflate(R.layout.controller_sign_in, container, false)
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(view.context.getString(R.string.default_web_client_id))
                .requestEmail()
                .build()
        mGoogleApiClient = GoogleApiClient.Builder(view.context)
                .enableAutoManage(view.context /* I need an activity here */, this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build()

        mFirebaseAuth = FirebaseAuth.getInstance()

        return view
    }
}

我尝试使用 view.context 而不是 activity 但它不起作用。它只需要 FragmentActivty。 如何初始化 GoogleApiClient inside conductor 或将其传递到那里? 我不想在这里使用 DI

我找到了这个问题的解决方案: 这很简单。 view.context 已经是 MyActivity,我只需要投射它:

GoogleApiClient.Builder(view.context).enableAutoManage(view.context as MyActivity, this)

您还可以通过在您的 controller

中调用 getActivity() 来获取父级 activity