web-dev-qa-db-ja.com

Androidカスタムビューでのビューバインディング

たとえば、カスタムビューでViewBindingを試してみたいのですが、

MainActivity <=> layout_main.xml
MyCustomView <=> layout_my_custom_view.xml

layout_main.xml

<FrameLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <com.example.myapplication.MyCustomView
            Android:id="@+id/custom_view"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />
</FrameLayout>

layout_my_custom_view.xml

<LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <TextView
            Android:id="@+id/line1"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Line1" />

        <View
            Android:id="@+id/divider"
            Android:layout_width="match_parent"
            Android:layout_height="2dp"
            Android:background="#2389bb" />

        <TextView
            Android:id="@+id/line2"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Line2" />
</LinearLayout>

主な活動

class MainActivity : AppCompatActivity() {

    private lateinit var binding: LayoutMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = LayoutMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.customView.line1.text = "Hello"
        binding.customView.line2.text = "World"
    }
}

私のMainActivityでは、バインディングを使用してMyCustomViewを見つけることができますが、MyCustomViewで@id/line1および@id/line2をさらに見つけることができません。この場合、ViewBindingのみを使用することは可能ですか、それともfindViewByIdまたはKotlin合成を使用する必要がありますか?

前もって感謝します。

3
Z.J Hung

カスタムビューでセッターを使用できると思います。 ViewBindingはメインレイアウトのバインディングクラスを生成するため、CustomViewクラスを返す必要があります。したがって、テキストを変更するために、先ほど書いたセッターを使用できます。

0
Arda Kucukoz

MainActivityクラスを共有することは可能ですか?

どのようにビューを参照しようとしていますか?

理想的には、findViewByIdまたはKotlin syntheticを使用してビューを参照/アクセスできるようにする必要があります。

0
Arun K