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 子模块中的数据绑定 的相关文章

  • 在 JellyBean 上使用 LogCat

    我有一个非常随机发生的错误 所以我依赖LogCat我从 Play 商店购买的监控应用程序 以查看发生时设备上抛出的异常 自从使用 Jelly Bean 以来 我没有看到任何日志记录 我读过 使用 Jelly Bean 应用程序只能看到Log
  • 在 Android 和 iOS 上播放的视频/音频编解码器设置是什么

    哪些编解码器设置将生成可在 Android videoView 和 iOS UIWebView 上播放的有效视频 安卓 http developer android com guide appendix media formats html
  • 在 WebViewClient 中重写 shouldInterceptRequest 时系统崩溃

    Goal 覆盖 WebView 发出的所有请求并自己发出请求 最终设置代理 Code Override public WebResourceResponse shouldInterceptRequest WebView view Strin
  • 更换电池后广播接收器会导致某些手机上的应用程序崩溃

    每当手机插入电源时 我都会激活我的应用程序 这是我的清单
  • Android 全屏对话框片段(如日历应用程序)

    我正在尝试实现如下图所示的全屏对话框 我能够显示全屏对话框 但是当显示对话框时 状态栏颜色变为黑色并且不保留原色深色 这是我的对话片段 public class IconsDialogFragment extends DialogFragm
  • getWidth() 和 getHeight 在 onMeasure() 之后返回零(特定设备)

    我注意到在调用 onMeasure 后 我的应用程序的视图为 getWidth 和 getHeight 返回 0 这种情况只发生在少数设备上 对于大多数 Android 设备 以下代码可以正常工作 我的 checkViewAndLoad 函
  • 按下按钮时清除编辑文本焦点并隐藏键盘

    我正在制作一个带有编辑文本和按钮的应用程序 当我在 edittext 中输入内容然后单击按钮时 我希望键盘和焦点在 edittext 上消失 但我似乎无法做到这一点 我在 XML 中插入了这两行代码 android focusable tr
  • 从 Bitmap 类创建 .bmp 图像文件

    我创建了一个使用套接字的应用程序 客户端在其中接收图像并将图像数据存储在 Bitmap 类中 谁能告诉我如何创建一个名为我的图像 png or 我的图像 bmp来自此 Bitmap 对象 String base64Code dataInpu
  • AlertDialog 关闭不起作用

    我有以下警报对话框 AlertDialog Builder dialogBuilder new AlertDialog Builder mContext dialogBuilder setTitle R string title dialo
  • addToBackStack 之后的 popBackStack() 不起作用

    我的项目包含两个片段 FragmentA 应用启动时默认加载的fragment FragmentB 替换fragmentA当单击按钮完成时 这是我的主视图的 XML
  • Android中的SQLite是否有内存缓存以及如何释放或清除它?

    首先 我在 Android 应用程序中创建一个名为 mydb 的数据库 DBHelper dbHelper new DBHelper context mydb null 1 DBHelper is my custom class 并将一些数
  • 何时取消订阅

    我有一个关于如何取消订阅可观察的问题 我有两个代码 但我不确定哪一个更好 示例 1 gt 流结束后取消订阅订阅者 Subscriber
  • 从 Android 模拟器使用 WebView WebGL

    据我了解 WebGL 仅在 Android Lollipop 中的 WebView 更新 Play 商店中的 WebView 组件 和较新版本 无需 Play 商店更新 中受支持 但是 我有一个使用 Android 7 1 1 的模拟器 并
  • 将多个视频文件合并到一个文件中

    我有多个以相同帧速率和分辨率录制的视频 我想将两个视频合并为一个视频 因此结果文件将是大视频 我正在使用 MP4 解析器 api 并使用下面的代码 Movie countVideo new MovieCreator build Channe
  • 存储 FCM 的令牌

    我正在尝试将我的令牌存储在我的云数据库中 我稍后将在云函数中使用此令牌 以便向已添加为好友的用户发送通知 然而 推送设备令牌不起作用 因为用户未经授权 授权后我无法保存它 因为令牌是在安装应用程序时生成的 private static fi
  • 设置 JAVA_HOME 变量时出现问题

    所以我刚刚下载了 Android Studio 并尝试设置 JAVA HOME 变量以便我可以运行它 我使用的是 Windows 8 并按照我找到的所有说明进行操作 但无济于事 转到高级系统设置 gt 环境变量 然后使用包含我的 jre7
  • Android 中的垂直(旋转)标签

    我需要两种在 Android 中显示垂直标签的方法 水平标签逆时针旋转 90 度 字母在侧面 带有字母的水平标签 如商店招牌 我是否需要为这两种情况 一种情况 开发自定义小部件 我可以使 TextView 以这种方式呈现吗 如果我需要完全自
  • 可以使用drawable-mdpi-fr、drawable-hdpi-fr、drawable-ldpi-fr进行不同分辨率的本地化

    我想对不同的本地化使用不同的图像 但是 我有所有分辨率和所有语言的图像 有什么办法可以做到这一点吗 是的 这是可能的 可绘制 de rDE ldpi 可绘制 de rDE mdpi 核实
  • 如何将上下文从一个活动传递到另一个活动?

    我有一个主要活动 它调用另一个活动来显示一些数据 我有一个私有数据库帮助程序对象 我在整个主要活动代码中使用它 有没有办法以优雅的方式将我的主要活动的上下文传递给我的子活动 即 来自子类 类似getCallingActivityContex
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐

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

    我的网站有一个导航栏 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包中的示例