在包含的布局的 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,那么您应该使用数据绑定而不是视图绑定