たとえば、カスタムビューで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合成を使用する必要がありますか?
前もって感謝します。
カスタムビューでセッターを使用できると思います。 ViewBindingはメインレイアウトのバインディングクラスを生成するため、CustomViewクラスを返す必要があります。したがって、テキストを変更するために、先ほど書いたセッターを使用できます。
MainActivityクラスを共有することは可能ですか?
どのようにビューを参照しようとしていますか?
理想的には、findViewById
またはKotlin synthetic
を使用してビューを参照/アクセスできるようにする必要があります。