从导体控制器

时间:2018-01-30 16:19:29

标签: android kotlin conductor

我正在使用conductor,我想在其中初始化GoogleApiClient。 正如在conductor doc中所说,指挥是为了替换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或将其传递到那里? 我不想在这里使用DI

1 个答案:

答案 0 :(得分:0)

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

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

您也可以通过致电activity

中的getActivity()来获取家长controller