gpt4 book ai didi

android - 如何使用数据绑定(bind)从另一个模块中 元素? - 安卓

转载 作者:行者123 更新时间:2023-12-03 19:09:09 26 4
gpt4 key购买 nike

我有两个模块,common 和 application1。
常见的包括 toolbar.xml , (其中包含一个按钮)和 application1 包括 MainActivityactivity_main .
activity_main.xml ,我想包括我共同声明的工具栏。但是,当我尝试从 MainActivity 访问工具栏中的按钮时,我得到一个错误

Cannot access 'com.application1.databinding.ToolbarBinding'. Checkmodule classpath for missing or conflicting dependencies


有谁知道如何解决这一问题?我已经在 gradle 中实现了“common”,但它仍然不起作用。以下是我的设置:
应用程序1.gradle
dependencies {
implementation project(':common')
}
common/res/layout/toolbar.xml
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</androidx.appcompat.widget.Toolbar>
application1/res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<include
android:id="@+id/toolbar"
android:layout="@layout/toolbar" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some Random Text" />

</LinearLayout>
application1/java/MainActivity.kt
class MainActivity : AppCompatActivity() {

private lateinit var mBinding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityMainBinding.inflate(layoutInflater)
mBinding.toolbar.button.setEnabled(true) // Cannot access 'databinding.ToolbarBinding'
setContentView(mBinding.root)
}

}

最佳答案

How to access include element from another module with Databinding?


我们需要执行以下几点来从另一个模块获取布局和绑定(bind):
  • 模块应该是 Android Library module
  • 这个 lib 模块应该在依赖项中的 app Gradle 文件中被提及为
    dependencies {
    api project(':mylibrary')
    }
  • 应用程序模块和库模块 gradle 文件都应该提到数据绑定(bind),
     buildFeatures {
    dataBinding true
    }

  • 然后在你的两个xml中,放置用于绑定(bind)布局的标签。所以两者
    xml 如下:

  • 库模块 XML:
     <layout>
    <androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

    </androidx.appcompat.widget.Toolbar>
    </layout>
  • 应用程序模块 XML:
      <layout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
    android:id="@+id/toolbar"
    layout="@layout/toolbar" />

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some Random Text" />

    </LinearLayout>
    </layout>

  • 然后,在您的 Activity 中,您可以简单地访问库中的按钮,如下所示:
     override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val binding: ActivityMainBinding =
    DataBindingUtil.setContentView(this, R.layout.activity_main)
    binding.toolbar.button // you can access now
    }

    关于android - 如何使用数据绑定(bind)从另一个模块中 <include> 元素? - 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62819509/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com