从导体控制器获取 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
我正在使用 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