為何要用 View Binding ?
View Binding 的功能和 findViewById() 相同,都是用來取得 GUI 元件的參考,但是使用 View Binding 更為方便。
View Binding有以下的優點:
1、null-safe
2、type-safe
3、比較快的編譯速度 (Faster compilation)
4、使用方便 (Ease of use)
這是我們要使用 View Binding 來取代 findViewById() 的原因。
但是 View Binding 也有一些不足之處:
1、View binding doesn’t support layout variables or layout expressions
2、View binding cannot be used to declare dynamic UI content straight from XML layout files
3、View binding doesn’t support two-way data binding
這些沒辦法達成的功能,我們會用 Data Binding 來補強。
如何使用 View Binding?
建立 Dependencies
app/build.gradle
...
android {
...
buildFeatures {
viewBinding true
}
}
...
在 activity 中使用
以 MainActivity.kt 為例
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
}
在 fragment 中使用
view binding 使用在 Activity 和 Fragment 上,會有一些不同,因為 Fragment 在 onCreateView() 時,才能跟 view 產生互動,所以必須要考慮到 binding 為 null 的狀況。
以 HelpFragment.kt 為例
class HelpFragment : Fragment() {
private var _binding: FragmentHelpBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentHelpBinding.inflate(inflater, container, false)
val view = binding.root
}
override fun onDestroy() {
super.onDestroy()
_binding = null
}
}
Comments