次の例外が発生します。
java.lang.NullPointerException: null オブジェクト参照で仮想メソッド 'void androidx.appcompat.widget.AppCompatTextView.setTag(java.lang.Object)' を呼び出そうとしています
独自のカスタム ビュー内のネストされたビューでデータ バインディングを使用しようとしたとき。私のカスタムは ConstraintLayout を拡張し、子要素を取りますが、これをフラグメント xml のデータバインディングで使用しようとすると、ネストされたビューに対してデータバインディングが機能しないようです。これは私のフラグメントのコード例です。はい、このコードは「レイアウト」タグでラップされています。
<LinearLayout>
<CustomView
android:id="@+id/customView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{viewModel.showView ? View.VISIBLE : View.GONE}"> <-- works
<AppCompatTextView
android:id="@+id/nestedView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.changableValue}"/> <-- does not work
</CustomView>
</LinearLayout>
私のカスタムビュー
class CustomView @JvmOverloads コンストラクター( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : ConstraintLayout(context, attrs, defStyleAttr) {
var binding: CustomViewBinding = DataBindingUtil.inflate(
LayoutInflater.from(context),
R.layout.custom_view,
this,
true
)
override fun addView(child: View, index: Int, params: ViewGroup.LayoutParams?) {
if (child.id == R.id.static_view_container) {
super.addView(child, index, params)
} else {
binding.nestedViewContainer.addView(child, index, params)
}
}
}
レイアウトは次のようになります
<merge
android:id="@+id/custom_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/static_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/nested_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</merge>
ネストされたビューでバインディングを機能させるにはどうすればよいですか?