shk*_*hko 1 android android-fragments kotlin
在 Google Codelab(不记得是哪一个)中,他们建议对片段执行以下操作:
class MyFragment : Fragment() {
private var _binding: MyFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
_binding = MyFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用例如访问视图binding.button1。
这样做有没有具体的原因,使用_binding和binding?有更好的方法吗?也许是 Fragment 的扩展(例如 BaseFragment),以避免代码重复。
不建议使用 BaseFragment 或 BaseActivity 或 BaseViewModel...它只会向您的项目添加样板代码。
对于绑定,您可以像这样使用它:
宣言:
private var binding: MyFragmentBinding? = null
Run Code Online (Sandbox Code Playgroud)
在创建视图时:
binding = MyFragmentBinding.inflate(inflater, container, false)
binding?.root
Run Code Online (Sandbox Code Playgroud)
用法:
binding?.button...
binding?.text...
binding?.cardView...
Run Code Online (Sandbox Code Playgroud)
onDestroyView:
binding = null
Run Code Online (Sandbox Code Playgroud)
一切都会正常工作,但是我们经常使用空检查(?),这使得代码变得混乱,如果我们需要某个视图中的某些内容,我们需要进行大量空检查,所以我们确信在onCreateView和onDestroyView,绑定不为空,所以我们有_binding和binding:
private var _binding: MyFragmentBinding? = null
private val binding get() = _binding!!
Run Code Online (Sandbox Code Playgroud)
我们_binding用 var 使其可变,这样我们就可以给它一个值,并且我们使它可以为空,以便稍后可以清除它。我们有binding一个自定义的 getter,这意味着每次我们调用binding它都会返回最新的值_binding,并强制它不为空!!。
现在我们分离变量,我们必须_binding初始化并清除我们的绑定,并且binding它是不可变的且不可为空,仅将其用于访问视图而无需进行空检查?
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |