0

次の例外が発生します。

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>

ネストされたビューでバインディングを機能させるにはどうすればよいですか?

4

0 に答える 0