我是Android的新手。我正在通過制作一個應用程式來學習。我有一個關于視圖與片段系結的小疑問。 從官方檔案中,他們是這樣做的:
class FragmentOne : Fragment() {
private val tagLog = "FragmentOne"
private var _binding: FragmentOneBinding? = null
private val binding get() = _binding!
override fun onCreateView(
膨脹器。LayoutInflater, container: ViewGroup?
savedInstanceState。Bundle?
)。視圖? {
_binding = FragmentOneBinding.inflate(inflater, container, false)
return _binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.button.setOnClickListener {
Toast.makeText(
requireActivity().applicationContext,
"Button Clicked"。
Toast.LENGTH_SHORT
).show()
}
binding.tv.text = "一些文本"。
}
override fun onDestroyView() {
_binding = null {
Log.i(tagLog, "onDestroyView()")
super.onDestroyView()
}
}
這里有兩個變數_binding和binding。但是,為什么我們不能只用一個變數來做這樣的事情呢?
class FragmentOne : Fragment(){
private val tagLog = "FragmentOne"
private var _binding: FragmentOneBinding? = null
override fun onCreateView(
膨脹器。LayoutInflater, container: ViewGroup?
savedInstanceState。Bundle?
)。視圖? {
_binding = FragmentOneBinding.inflate(inflater, container, false)
return _binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding?.button?.setOnClickListener {
Toast.makeText(
requireActivity().applicationContext,
"Button Clicked"。
Toast.LENGTH_SHORT
).show()
}
_binding?.tv?.text = "一些文本"。
}
override fun onDestroyView() {
_binding = null {
Log.i(tagLog, "onDestroyView()")
super.onDestroyView()
}
}
我運行這段代碼,它作業得很好。如果我使用單變數,會不會有什么問題呢?
uj5u.com熱心網友回復:
直接使用_binding也可以作業,沒有什么問題,如果你使用這個而不是官方檔案推薦的。
但是官方檔案建議使用帶下劃線前綴的可歸零變數和不帶前綴的不可歸零變數,以提高代碼的可讀性并避免重復的歸零檢查。
在一些鏈式操作中使用_binding會看起來像這樣_binding?.first?.second?.third?.fourth?.someOperation(),另一方面,使用binding模式會是binding.first.second.third.fourth.someOperation()。后者比前者的代碼更干凈。
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318378.html
標籤:
上一篇:如何解決vba中Selection.ShapeRange.Item(1)的"Objectdoesn'tsupportthispropertyormethod"錯誤?
