android 代码如何从中获取 activity? material-组件-android-代码实验室
How does this android code get the activity from ? material-components-android-codelabs
material-components-android-codelabs 是 material 组件的 git 演示代码库。在这个 repo 的 102-starter 分支中,在 LoginFragment.kt 中,有这段代码
(actvity as NavigationHost).navigateTo(ProductGridFragment(),false)
在 import 语句中,似乎没有任何内容表明 activity
来自何处,使用 android studio 查找任何声明都指向具有签名 public final FragmentActivity getActivity()
的函数。 activity
是如何设置并带入片段范围的?
getActivity()
是 Fragment
实例上的方法,Kotlin 允许您访问 Java 风格的 setter 和 getter as though they're properties:
// getters
val newThing = stuff.getThing()
val newThing = stuff.thing
// setters
stuff.setThing(newThing)
stuff.thing = newThing
// boolean setters
dog.setGood(true)
dog.isGood = true
// boolean getters
val goodBoy = dog.isGood()
val goodBoy = dog.isGood
请注意,无论您是获取还是设置,属性 版本看起来都一样,您只是读取和写入单个“属性”。在幕后,它正在调用相关函数。
Fragment
有一个函数:final public FragmentActivity getActivity()
-> 因为你在 fragment
的范围内,而且函数也在 fragment
范围内,你不需要任何导入
为了能够使用此 activity 引用,您的片段需要附加到 activity。 => 这应该发生在 onAttatch()
.
左右
最后提示:当您处于确定有支持的生命周期中时 activity,您可以使用 requireActivity()
来避免不必要的空值检查
Kotlin 允许您直接获取和设置属性,而无需调用方法。例如。您可以直接使用 activity
而不是调用 getActivity
。所以 (actvity as NavigationHost)
实际上转化为 (getActivity() as NavigationHost)
检查 Kotlin 参考资料 here。引用链接文档:
To use a property, simply refer to it by its name
material-components-android-codelabs 是 material 组件的 git 演示代码库。在这个 repo 的 102-starter 分支中,在 LoginFragment.kt 中,有这段代码
(actvity as NavigationHost).navigateTo(ProductGridFragment(),false)
在 import 语句中,似乎没有任何内容表明 activity
来自何处,使用 android studio 查找任何声明都指向具有签名 public final FragmentActivity getActivity()
的函数。 activity
是如何设置并带入片段范围的?
getActivity()
是 Fragment
实例上的方法,Kotlin 允许您访问 Java 风格的 setter 和 getter as though they're properties:
// getters
val newThing = stuff.getThing()
val newThing = stuff.thing
// setters
stuff.setThing(newThing)
stuff.thing = newThing
// boolean setters
dog.setGood(true)
dog.isGood = true
// boolean getters
val goodBoy = dog.isGood()
val goodBoy = dog.isGood
请注意,无论您是获取还是设置,属性 版本看起来都一样,您只是读取和写入单个“属性”。在幕后,它正在调用相关函数。
Fragment
有一个函数:final public FragmentActivity getActivity()
-> 因为你在 fragment
的范围内,而且函数也在 fragment
范围内,你不需要任何导入
为了能够使用此 activity 引用,您的片段需要附加到 activity。 => 这应该发生在 onAttatch()
.
最后提示:当您处于确定有支持的生命周期中时 activity,您可以使用 requireActivity()
来避免不必要的空值检查
Kotlin 允许您直接获取和设置属性,而无需调用方法。例如。您可以直接使用 activity
而不是调用 getActivity
。所以 (actvity as NavigationHost)
实际上转化为 (getActivity() as NavigationHost)
检查 Kotlin 参考资料 here。引用链接文档:
To use a property, simply refer to it by its name