Android 子模块中的数据绑定

2024-03-22

我有一个应用程序模块,让我们说“测试”。 “测试”模块依赖于子模块 B。两者都启用数据绑定。在库模块 B 中,我使用数据绑定创建一个简单的活动,其目的是为了可重用性,例如:我可以创建一个基本登录屏幕并稍后在许多应用程序中使用它。下面是B包中的示例代码。

package com.test.packageb

      open class MainActivity : AppCompatActivity() {

        lateinit var binding : ActivityMainBinding

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        }
    }

然后在“测试”模块中,我可以简单地继承 MainActivity 类来进行自定义操作,如下所示:

class MainActivity1 : MainActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    fun doSomething(){
        binding.rootLayout.setBackgroundResource(R.color.colorPrimary)
    }
}

但是,当我尝试运行“测试”应用程序时,出现此错误

错误:(17, 9) 无法访问类 'com.test.packageb.databinding.ActivityMainBinding'。检查你的模块 缺少或冲突的依赖项的类路径
错误:(17, 17) 未解决的参考:rootLayout

我错过了什么?还有什么需要实施的吗?

测试应用程序 build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.test.testapplication"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    dataBinding{
        enabled true
    }

    buildTypes {
        debug {

        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    kapt 'com.android.databinding:compiler:3.0.0-beta4'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation project(':packageb')
}

包B build.gradle

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"


    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    dataBinding{
        enabled true
    }
    buildTypes {
        debug {
            minifyEnabled false
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    kapt 'com.android.databinding:compiler:3.0.0-beta4'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}

不确定这个问题是否与您相关,但我设法找到了某种解决方案。

为了使其工作,基类应该具有泛型

class A<BINDING extends ViewDataBinding> {
    protected ABinding binding;

    void init(){
        binding = (ABinding) DataBindingUtil.setContentView(this, R.layout.a);
    }
}

并将相同的绑定从子模块传递给子类

class B<ABinding> {
    // you can use instance in this class
}

这里的主要问题是您无法彻底更改 UI,只能隐藏现有元素或在运行时添加新元素。但我想在这种情况下更容易创建一个全新的类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 子模块中的数据绑定 的相关文章

随机推荐

  • 如何将导航栏存储在一个文件中?

    我的网站有一个导航栏 div ul li a href index html Home a li li a href about html About Us a li li a href http www brownpapertickets
  • Web 部署 3 (IIS) 的自动备份 - 在备份中排除文件夹

    我已成功通过以下方式设置 Web 部署自动备份本指南 http www iis net learn publish using web deploy web deploy automatic backups 效果很好 但是 在我的网站中 我
  • $在mongodb查询中分别展开2个字段

    我想要 unwind2 个字段 school and home 数据库结构就像 id 1 school path school1 code code1 path school2 code code2 path school3 code co
  • 是否可以使用 PropTypes 来验证类似 Dictionary 的对象?

    我需要在我的减速器中验证类似字典的对象 但由于我已经在使用 Babel 所以我不想求助于 Typescript 等工具 以此对象为例 posts byId post1 id post1 author user1 body comments
  • url 的最大重试次数超出(无法建立新连接:[Errno 110] 连接超时)

    raise ConnectionError e request request requests exceptions ConnectionError HTTPSConnectionPool host mycompanyurl in por
  • 在 Powershell 上获取行号?

    所以我一直在寻找 但找不到任何不会给我带来任何回报的东西 我有一个带有变量的代码 并且有一个包含很多行的文件 例如 我有以下文件 things txt Ketchup Mustard Pumpkin Mustard Ketchup 而我要取
  • 复选框绑定 CHANGE 事件

    我想在用户单击 触摸复选框后提交表单 THE HTML
  • 如何在c中通过指针传递二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 将表示二维数组的指针传递给 C 中的函数 https stackoverflow com questions 5329107 passing a pointer representing a 2d a
  • LLVM 6.0.0 的构建大小很大 (42G)

    I built llvm 6 0 0从源头开始 一切正常 我只是想知道它的尺寸怎么这么大 42G 我可以轻松删除一些目标文件或其他文件以使构建目录更小吗 du hs GIT llvm 6 0 0 build 42G home oren GI
  • 当 Bash 脚本编写和捕获输出时,在后台使用与号 (&) 分叉命令

    我希望在后台分叉一个进程 同时捕获 bash 脚本中的输出 我可以运行以下脚本来 ping IP 列表 它将每个调用移至后台并且运行速度非常快 但它不会捕获执行命令的输出以供进一步处理 for i in cat list txt do pi
  • 如何在 Visual C++ 2008 中创建 UTF-8 字符串文字

    在 VC 2003 中 我可以将源文件保存为 UTF 8 并按原样使用所有字符串 换句话说 以下代码将按原样将字符串打印到控制台 如果源文件保存为 UTF 8 则输出将为 UTF 8 printf Chinese Traditional p
  • Intel Fortran 错误 #6633:实际参数的类型与虚拟参数的类型不同

    对于可能在这里提出这样一个基本问题 我深表歉意 我是使用英特尔 Fortran 编程的新手 所以我认为在这种情况下 我不知道有一些东西丢失或组织错误 如果有人能在这方面帮助我 我将不胜感激 问题是我在编译代码时看到以下错误 而我相信我已经声
  • 如何在 Android 上创建渐进式 JPEG 图像

    我需要通过very来自 Android 手机的低带宽连接 低至 10kByte s 并希望以渐进 隔行 模式发送它们 以便另一端的用户在漫长的传输过程中开始看到图像 现在 我正在使用常规照片应用程序创建图像 Intent takePictu
  • 突变观察者 - DOM 通过回调函数改变

    有没有办法 如何强制突变观察者忽略回调函数引起的 DOM 变化 现在我有 var config attributes true childList true characterData true var target document bo
  • 如何在 Visual Studio 中获得 .feature 文件的 Gherkin 语法突出显示?

    默认情况下 Feature Scenario Given When Then 等关键字不会突出显示 是否有现成的模板可以实现此目的 最新版本SpecFlow http www specflow orgVS2010有一个内置的语法高亮
  • 通过绘图下拉菜单切换显示的迹线

    我正在使用 R 编程语言 我试图在这里复制本教程以获取我自己的数据 https plotly com r dropdowns https plotly com r dropdowns 我创建了一些假数据并绘制了 4 个图 load libr
  • Rails.env 与 RAILS_ENV

    在检查运行环境时 我在示例中看到了这两种情况 首选什么 就所有意图和目的而言 它们是否平等 根据文档 http api rubyonrails org classes Rails html method c env Rails env wr
  • 如何修复 BBcode 正则表达式

    我有一个获取 BBcode 标签的正则表达式 除了一个小故障之外 它工作得很好 这是当前的表达式 x22 x22 1 以下是它成功匹配的一些文本及其构建的组 url http www google com 去 http www google
  • 将可选属性表示为 C++ 类成员

    我正在根据模式生成 C 代码 存在实体 每个实体包含属性 每个属性具有相应的数据类型 现在的问题是其中一些属性是 可选的 这意味着它们不必是类声明的一部分 然而 在C 中 某些东西要么是类的成员 要么不是类的成员 没有诸如 可选数据成员 之
  • Android 子模块中的数据绑定

    我有一个应用程序模块 让我们说 测试 测试 模块依赖于子模块 B 两者都启用数据绑定 在库模块 B 中 我使用数据绑定创建一个简单的活动 其目的是为了可重用性 例如 我可以创建一个基本登录屏幕并稍后在许多应用程序中使用它 下面是B包中的示例