Android View Bindingの使用紹介
2779 ワード
前言
Android Studioの安定版は3.6バージョンを発表し、いくつかの新しい変化をもたらした:まず外観、起動ページが変わり、ロゴが変わり、より現代化した.マルチプレビュー機能を追加し、複数のサイズの画面の表示効果を同時にプレビューできます.シミュレータはマルチスクリーンをサポートします.新しいビューバインドコンポーネントView Bindingもついにサポートされました.など.
以前はfindViewById,kotlinにAndroid Kotlin Extensionsを導入してidで直接アクセスしていました.前者はテンプレート化が深刻で、重複コードが多い.後者が一番便利です.新しい選択肢があります-View Binding、公式解釈:
ビューバインド機能により、ビューとインタラクティブなコードをより簡単に作成できます.モジュールでビューバインドを有効にすると、モジュール内のXMLレイアウトファイルごとにバインドクラスが生成されます.バインドクラスのインスタンスには、対応するレイアウトにIDを持つすべてのビューへの直接参照が含まれます.
ほとんどの場合、ビューバインドはfindViewByIdの代わりになります.
使用
View Bindingはモジュールごとに有効にできます.モジュールで有効にするには、モジュールのbuild.gradleに次の構成を追加します.
使用法
モジュールがView Bindingを有効にすると、モジュールに含まれるXMLレイアウトファイルごとにバインドクラスが生成されます.各バインドクラスには、ルートビューおよびidを持つすべてのビューへの参照が含まれます.バインドクラスのクラス名はxmlの名前に「Binding」を付けます.
たとえば、レイアウトファイル名がactivity_などと仮定します.main.xml:
バインドクラスのインスタンスを使用して、任意のビューを参照できるようになりました.
区別する
findViewByIdとの違い:空のセキュリティとタイプのセキュリティで、誤ったidが参照されたことによる空のポインタ異常やタイプ変換異常はありません.
databindingとの違い:databindingはコードを使用して作成されたデータバインドレイアウトのみを処理します.ViewBindingではレイアウト変数やレイアウト式はサポートされていないため、xmlでレイアウトをデータにバインドすることはできません.
Android Kotlin Extensionsとの違い:使用上、後者は簡単で乱暴で、直接idでアクセスし、View Bindingはバインドクラスのインスタンスを作成する必要があります.後者には、同じidが複数のxmlに存在するなど、パケットを間違えやすく、パケットが間違っていると、他のViewがidを間違えて空のポインタを招く可能性がありますが、View Bindingではこのようなことは明らかにありません.
まとめ
findView ByIdまたは他のView注入フレームワークと選択する場合は、View Bindingを選択することをお勧めします.コードはより簡潔で安全です.
databindingを使用するプロジェクトの場合は、ルートラベル以外のxmlを処理するためにView Bindingを補足として使用できます.(ps:このようなシーンは起こり得ないようですか?クラスの生成が多すぎるとbuild速度に影響し、インストールパッケージの体積が増加するので、このようなシーンは避けなければなりません.
Android Kotlin Extensionsと選択すると、現在のところ、最適解はなく、どちらも開発者が開発効率を最大化したいのか、コードの簡潔な使い勝手(Android Kotlin Extensions)なのか、安定したエラー確率を最小化する傾向にあるのかにかかっています.
By the way,View Bindingは現在includeラベルに導入されたxmlをサポートしていません.View Binding機能の充実、将来の地位と役割、Android Kotlin Extensionsを超えることができるかどうかは、後続バージョンに引き続き注目する必要があります.
Android Studioの安定版は3.6バージョンを発表し、いくつかの新しい変化をもたらした:まず外観、起動ページが変わり、ロゴが変わり、より現代化した.マルチプレビュー機能を追加し、複数のサイズの画面の表示効果を同時にプレビューできます.シミュレータはマルチスクリーンをサポートします.新しいビューバインドコンポーネントView Bindingもついにサポートされました.など.
以前はfindViewById,kotlinにAndroid Kotlin Extensionsを導入してidで直接アクセスしていました.前者はテンプレート化が深刻で、重複コードが多い.後者が一番便利です.新しい選択肢があります-View Binding、公式解釈:
ビューバインド機能により、ビューとインタラクティブなコードをより簡単に作成できます.モジュールでビューバインドを有効にすると、モジュール内のXMLレイアウトファイルごとにバインドクラスが生成されます.バインドクラスのインスタンスには、対応するレイアウトにIDを持つすべてのビューへの直接参照が含まれます.
ほとんどの場合、ビューバインドはfindViewByIdの代わりになります.
使用
View Bindingはモジュールごとに有効にできます.モジュールで有効にするには、モジュールのbuild.gradleに次の構成を追加します.
android {
...
viewBinding {
enabled = true
}
}
使用法
モジュールがView Bindingを有効にすると、モジュールに含まれるXMLレイアウトファイルごとにバインドクラスが生成されます.各バインドクラスには、ルートビューおよびidを持つすべてのビューへの参照が含まれます.バインドクラスのクラス名はxmlの名前に「Binding」を付けます.
たとえば、レイアウトファイル名がactivity_などと仮定します.main.xml:
那么生成的绑定类类名是ActivityMainBinding。这个类有两个成员变量tvName和btnOpen,还包含一个getRoot()方法,返回根视图,此例中返回LinearLayout。
要获取绑定类的实例,可以通过静态 inflate() 方法。
private lateinit var binding: ActivityMainBinding
@Override
fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(inflater)
setContentView(binding.root)
}
バインドクラスのインスタンスを使用して、任意のビューを参照できるようになりました.
binding.tvName = "name"
binding.btnOpen.setOnClickListener{
Log.d(TAG,"btnOpen click")
}
区別する
findViewByIdとの違い:空のセキュリティとタイプのセキュリティで、誤ったidが参照されたことによる空のポインタ異常やタイプ変換異常はありません.
databindingとの違い:databindingはコードを使用して作成されたデータバインドレイアウトのみを処理します.ViewBindingではレイアウト変数やレイアウト式はサポートされていないため、xmlでレイアウトをデータにバインドすることはできません.
Android Kotlin Extensionsとの違い:使用上、後者は簡単で乱暴で、直接idでアクセスし、View Bindingはバインドクラスのインスタンスを作成する必要があります.後者には、同じidが複数のxmlに存在するなど、パケットを間違えやすく、パケットが間違っていると、他のViewがidを間違えて空のポインタを招く可能性がありますが、View Bindingではこのようなことは明らかにありません.
まとめ
findView ByIdまたは他のView注入フレームワークと選択する場合は、View Bindingを選択することをお勧めします.コードはより簡潔で安全です.
databindingを使用するプロジェクトの場合は、ルートラベル以外のxmlを処理するためにView Bindingを補足として使用できます.(ps:このようなシーンは起こり得ないようですか?クラスの生成が多すぎるとbuild速度に影響し、インストールパッケージの体積が増加するので、このようなシーンは避けなければなりません.
Android Kotlin Extensionsと選択すると、現在のところ、最適解はなく、どちらも開発者が開発効率を最大化したいのか、コードの簡潔な使い勝手(Android Kotlin Extensions)なのか、安定したエラー確率を最小化する傾向にあるのかにかかっています.
By the way,View Bindingは現在includeラベルに導入されたxmlをサポートしていません.View Binding機能の充実、将来の地位と役割、Android Kotlin Extensionsを超えることができるかどうかは、後続バージョンに引き続き注目する必要があります.