見出し画像

[Android] DataBinding-ktx 2.2.0 をリリースしました

追記:DataBinding-ktx 3.0.1 をリリースしました

・・・

DataBinding-ktx とは

DataBinding に関する問題を解決し、安全・簡単に利用するためのライブラリです。

DataBinding-ktx について

DataBinding-ktx の解決する問題については以下を参照してください。

DataBinding-ktx 2.2.0 について

  Top-level function による変数宣言をサポート

既存のコードを Delegated Property に変換するのは面倒なため、より差分が少なく、一括置換で対応しやすい Top-level function を用意しました。

 class DataBindingActivity : FragmentActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        val binding = DataBindingUtil.setContentView<DataBindingActivityBinding>(this, R.layout.data_binding_activity)
-        binding.lifecycleOwner = this
+        val binding = setContentView<DataBindingActivityBinding>(this, R.layout.data_binding_activity)
     }
 }

また、Delegated Property の場合、Kotlin からしか利用できないのですが、Top-level function にすることによって Java で以下のように利用可能になりました。

public class DataBindingActivity extends FragmentActivity {
   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       DataBindingActivityBinding binding = ActivityDataBinding.setContentView(this, R.layout.data_binding_activity);
   }
}

  ViewBinding の変数宣言をサポート

ViewBinding は DataBinding のバインディング機能を取り除き、id による View へのアクセス機能のみを提供する機能です。

ViewBinding は以下のように利用することができます。

class ViewBindingActivity : FragmentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       val binding = ViewBindingActivityBinding.inflate(layoutInflater)
       setContentView(binding.root)
   }
}

生成される Binding クラスには setContentView メソッドがないため、別途 setContentView する必要があります。そのため、以下のように書けるようにしました。

class ViewBindingActivity : FragmentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       val binding = setContentView { ViewBindingActivityBinding.inflate(it) }
   }
}

また、DataBinding と同様に Delegated Property で宣言できるようにしています。

class ViewBindingActivity : FragmentActivity() {
   private val binding: ViewBindingActivityBinding by viewBinding()
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       // use binding
   }
}

しかし、DataBinding とは異なり ViewBinding に関しては標準の書き方で問題がないため、Delegated Property 方式で書き方を統一したいという理由がなければ使う必要はないと思います。
* ViewBinding では DataBindingUtil 相当のクラスがないため、生成される Binding クラスの static メソッドを呼ぶ必要があり、内部でリフレクションを使っています。

DataBinding-ktx 2.2.0 はこちら

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?