在包含的布局的 xml 中使用 onClick 属性
Use onClick attribute in the xml of an included layout
我的项目有一个名为 Welcome.kt
的 class
class Welcome : AppCompatActivity() {
private lateinit var vb: ActivityWelcomesBinding
fun runDemo(v: View) {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
vb = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(vb.root)
}
}
在这个 class (Welcome.kt) 的布局中,我有通常的视图和包含的布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".Welcome">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
...
...
<include layout="@layout/layout_buttons" />
...
...
</FrameLayout>
</ScrollView>
</FrameLayout>
这是包含的布局(layout_buttons),一系列具有 onClick 属性的按钮,应该执行 activity [=26= 中的“startDemo”函数]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
...
...
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text1" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text2" />
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text3" />
</LinearLayout>
由于按钮位于包含的布局内,我找不到让它们调用 Welcome.kt activity.
的“runDemo”函数的方法
我已经搜索过信息,但没有找到解决我问题的方法。
提前致谢
你应该给你的包含标签一个id,例如
<include id="@+id/buttonsLayout"
layout="@layout/layout_buttons" />
在此之后你可以像这样使用它:
class Welcome : AppCompatActivity() {
private lateinit var vb: ActivityWelcomesBinding
fun runDemo(v: View) {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
vb = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(vb.root)
vb.buttonsLayout.yourBtnId
}
}
如果您仍想在 xml 中使用 onClick,那么您应该使用数据绑定而不是视图绑定
我的项目有一个名为 Welcome.kt
的 classclass Welcome : AppCompatActivity() {
private lateinit var vb: ActivityWelcomesBinding
fun runDemo(v: View) {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
vb = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(vb.root)
}
}
在这个 class (Welcome.kt) 的布局中,我有通常的视图和包含的布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".Welcome">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
...
...
<include layout="@layout/layout_buttons" />
...
...
</FrameLayout>
</ScrollView>
</FrameLayout>
这是包含的布局(layout_buttons),一系列具有 onClick 属性的按钮,应该执行 activity [=26= 中的“startDemo”函数]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
...
...
<Button
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text1" />
<Button
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text2" />
<Button
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:onClick="runDemo"
android:text="@string/text3" />
</LinearLayout>
由于按钮位于包含的布局内,我找不到让它们调用 Welcome.kt activity.
的“runDemo”函数的方法我已经搜索过信息,但没有找到解决我问题的方法。
提前致谢
你应该给你的包含标签一个id,例如
<include id="@+id/buttonsLayout"
layout="@layout/layout_buttons" />
在此之后你可以像这样使用它:
class Welcome : AppCompatActivity() {
private lateinit var vb: ActivityWelcomesBinding
fun runDemo(v: View) {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
vb = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(vb.root)
vb.buttonsLayout.yourBtnId
}
}
如果您仍想在 xml 中使用 onClick,那么您应该使用数据绑定而不是视图绑定