最後更新日期:2022 年 10 月 5 日

為何要用 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
    }
}
Last modified: 2022 年 10 月 5 日

Author

Comments

Write a Reply or Comment

Your email address will not be published.