标签: android-databinding

Android数据绑定:如何传递变量以包含布局

谷歌文档说,变量可以从包含布局传递到包含布局的绑定,但我无法使其工作,但是获取数据绑定错误****msg:标识符必须具有XML文件中的用户定义类型.处理程序缺少它.包含XML看起来像这样:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:bind="http://schemas.android.com/apk/res-auto">

<data>
    <import type="com.example.FocusChangeHandler"/>

    <variable
        name="handler"
        type="FocusChangeHandler"/>
</data>

<!-- Some other views  --->

   <include
            android:id="@+id/inputs"
            layout="@layout/input_fields"
            bind:handler="@{handler}"/>        
</layout>
Run Code Online (Sandbox Code Playgroud)

包含的XML就像这样:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
<EditText
   android:id="@+id/nameEdit"       
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"       
   android:onFocusChange="@{handler.onFocusChange}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)

我能够通过生成的绑定类引用包含布局的视图,但传递变量不起作用.

android-databinding

17
推荐指数
3
解决办法
1万
查看次数

Android数据绑定和Kotlin

我正在将我的Android应用程序从Java转换为Kotlin.它正常工作,除非我尝试转换使用Android数据绑定库的文件.在这种情况下,Android Studio会在编译时抱怨未解析的引用:

Error:(10, 44) Unresolved reference: AdapterHistoriesListBinding
Run Code Online (Sandbox Code Playgroud)

AdapterHistoriesListBinding应该由数据绑定库生成的文件的名称在哪里.它在Java中正常工作,所以我猜这是Kotlin的一个问题.

我使用的是Android Studio 2.0.0-beta6,Android Gradle Plugin 2.0.0-beta6和Kotlin 1.0.有没有什么可以使数据绑定库与Kotlin一起工作?

android kotlin android-databinding

17
推荐指数
1
解决办法
4602
查看次数

android数据绑定:如何获取有用的错误消息

在android studio 2.1中,来自xml错误的编译时错误消息完全没有帮助:

Error:(11, 41) error: package mypackage.databinding does not exist
Error:(15, 13) error: cannot find symbol class MyActivityBinding
Run Code Online (Sandbox Code Playgroud)

真正的错误通常是"没有这样的属性android:adapter",或"变量foo不包含属性栏"或类似的东西.但是它没有实际显示这样的错误,而是显示了上面那些无用的错误,它们只告诉你由于某些未知错误而没有生成绑定.

android android-databinding

17
推荐指数
3
解决办法
1998
查看次数

升级Android Studio 2.3后,DataBinding无法正常工作

DataBinding在我的项目中运行得非常好,但是在今天升级Android Studio 2.3之后.运行'app'失败,因为以下错误:

Error:(15, 40) Error: package com.javan.myrecorder.databinding not exist.
import com.javan.myrecorder.databinding.FragmentEventsBinding;
:app:compileMockDebugJavaWithJavac FAILED
Run Code Online (Sandbox Code Playgroud)

我只是升级android studio并没有改变任何东西.所有插件都是最新的!现在我的问题是,为什么会发生这个错误,我怎么能解决它?欢迎任何帮助!

英语不是我的母语; 请原谅我的任何错误.


EDIT1

像android项目googlesamples/android-architecture

  • git checkout todo-databinding
  • 然后运行./gradlew assembleDebug构建,构建因以下错误而失败:

完整的构建日志


EDIT2 我已经修复了这个问题,因为在升级到Gradle 2.3之后,数据绑定已经破坏了.

build.gradle(app)

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

..balabala

dependencies {
    apt 'com.android.databinding:compiler:2.3.0'
}
Run Code Online (Sandbox Code Playgroud)

我项目中的一些文件:

gradle-wrapper.properties

#Mon Mar 06 10:59:04 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
Run Code Online (Sandbox Code Playgroud)

@petrnohejl @George Mount @ Sa-Zad Prasla,谢谢!

data-binding android android-studio android-databinding android-studio-2.3

17
推荐指数
1
解决办法
8070
查看次数

gradle属性是"实验性的和不受支持的"是什么意思?

有几次,为了解决问题或更新依赖项,我必须启用给定的gradle选项设置.

  • 例如,Robolectric 4.0迁移指南指出:

    把它放在你的gradle.properties中:

    android.enableUnitTestBinaryResources=true

  • 同样,为了调试数据绑定编译错误,我遵循Gradle的构建日志中打印的建议:

    Gradle可能会禁用渐进式编译[...].
    考虑android.enableSeparateAnnotationProcessing=true在gradle.properties文件中设置实验性功能标志,以在单独的任务中运行注释处理并进行增量编译.


从这两个例子中,我得知作者(Robolectric/gradle维护者)确信启用此选项将对每种情况产生积极影响.
但是,在这两种情况下,我都会在构建输出中收到此警告:

警告:选项设置'android.enableUnitTestBinaryResources = true'是实验性的,不受支持.当前默认值为"false".

警告:选项设置'android.enableSeparateAnnotationProcessing = true'是实验性的,不受支持.当前默认值为"false".

gradle.properties几个月以来我的旗帜已经存在了android.databinding.enableV2=true.为了看看它是如何处理的,我试着把它放到false,它带来了相同的The option setting 'android.databinding.enableV2=false' is experimental and unsupported.警告(这似乎表明unsupported设置被忽略).

  • 我知道这些是实验性功能标志.但是不支持呢?这是否意味着如果出现任何问题我不应该期待支持,或者这是否意味着他们会被忽略

  • 如果这意味着它们被忽略了,那么这些属性是如何被使用的呢?

android gradle android-databinding gradle-properties

17
推荐指数
1
解决办法
5659
查看次数

Android DataBinding和MVVM - 使用相同视图模型为不同条件使用相同的布局文件

我一直在开发一个带有数据绑定和MVVM的应用程序.

我正试图在横向模式下为我的应用程序使用替代布局.我有:

layout/fragment_content.xml
layout-land/fragment_content.xml
Run Code Online (Sandbox Code Playgroud)

两种布局都具有不同外观的相同视图,并从相同的视图模型获取提要,如下所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data class="MyBinding">

    <variable
        name="viewModel"
        type="com.myapp.package.viewModel.VMFirst"/>

    <variable
        name="controlModel"
        type="com.myapp.package.viewModel.VMSecond"/>
</data>

<DIFFERENT CONTENT HERE>
Run Code Online (Sandbox Code Playgroud)

两种布局都存在所有视图和id.

好吧,问题是,它不编译,错误只是"cannot find symbol method getViewModel"和另一个变量的getter.

到目前为止我尝试了什么:

  1. 使用布局和布局 - 土地文件夹(失败,错误在上面解释)

  2. 使用布局别名使用我在此处找到的布局别名问题199344:数据绑定不适用于布局别名.尝试这种方法时,我没有更改xml文件中的任何内容.这也失败了,错误是Could not write to com.myapp.package.databinding.MyBinding

是否无法data在多个布局文件中使用数据绑定标记?在使用数据绑定时,我应该使用什么来为不同的状态使用不同的布局?谢谢 !

编辑:删除class="MyBinding"没有更改错误.

android android-layout android-studio android-databinding

16
推荐指数
1
解决办法
4548
查看次数

Android数据绑定 - 错误:(119,29)标识符必须具有XML文件中的用户定义类型.main_radio_subscribe缺少它

我一直试图使用android数据绑定中的隐式属性监听器(引用)来控制视图的可见性,它允许通过id和访问属性(如checked,visible等)访问视图,但是当尝试使用它时,它会抛出像这样的错误

Error:(119, 29) Identifiers must have user defined types from the XML file. addTodo_switch_remind is missing it
Run Code Online (Sandbox Code Playgroud)
<android.support.v7.widget.SwitchCompat
        android:id="@+id/addTodo_switch_remind"
        style="@style/MediumTextViewStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/addTodo_space_project"
        android:text="@string/add_todo_remind_label"
        android:textOff="@string/generic_no_text"
        android:textOn="@string/generic_yes_text" />

    <android.support.v4.widget.Space
        android:id="@+id/addTodo_space_remind"
        style="@style/FormsSpacingStyle"
        android:layout_below="@+id/addTodo_switch_remind" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/addTodo_space_remind"
        android:orientation="vertical"
        android:padding="@dimen/grid_box_single"
        android:visibility="@{addTodo_switch_remind.checked ? View.VISIBLE : View.GONE}">
Run Code Online (Sandbox Code Playgroud)

android android-databinding

16
推荐指数
2
解决办法
1万
查看次数

数据绑定泛型变量

如何定义数据绑定变量的泛型类型?

以下代码永远不会编译.

<data>
    <variable
        name="viewModel"
        type="com.example.viewmodel.ViewModel<Model>"/>
</data>
Run Code Online (Sandbox Code Playgroud)

android android-databinding

15
推荐指数
2
解决办法
5694
查看次数

android数据绑定单元测试错误无法解析数据绑定编译器选项.PARAMS:

当我尝试为我的kotlin android项目设置单元测试时,我遇到了以下错误.以前有人遇到过这种问题吗?

这已被标记为官方错误跟踪器上的错误

    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:compileDebugUnitTestJavaWithJavac'.
    > java.lang.RuntimeException: Failed to parse data binding compiler options. Params:
      kapt.annotations : /Users/trevor/Dev/Android/workspace/gitlab-example/app/build/tmp/kapt/debugUnitTest/wrappers/annotations.debugUnitTest.txt
      kapt.kotlin.generated : /Users/trevor/Dev/Android/workspace/gitlab-example/app/build/tmp/kapt/debugUnitTest/kotlinGenerated
    
    * Try:
    Run with --info or --debug option to get more log output.

    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugUnitTestJavaWithJavac'.
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:84)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
            at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
            at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
            at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
            at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
            at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
            at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
            at …

data-binding android unit-testing kotlin android-databinding

15
推荐指数
1
解决办法
3183
查看次数

如何将架构组件与Android上的数据绑定相结合?

我开发了基于android数据绑定库的应用程序:https://developer.android.com/topic/libraries/data-binding/index.html

class SignInViewModel extends BaseObservable {

    @Bindable
    public String getLogin() {
        return login;
    }

    @Bindable
    public String getPassword() {
        return password;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想使用新库中的ViewModelProviders:https: //developer.android.com/topic/libraries/architecture/guide.html

SignInViewModel signInViewModel = ViewModelProviders.of(this).get(SignInViewModel.class);
Run Code Online (Sandbox Code Playgroud)

它如何结合?任何的想法?或者应该结合这两个库?

编辑

我改为:

class SignInViewModel extends ViewModel {
   public ObservableField<String> login = new ObservableField<>("");

    public ObservableField<String> password = new ObservableField<>("");
}
Run Code Online (Sandbox Code Playgroud)

现在编译,但问题是:它是正确的方式?

data-binding android android-databinding

15
推荐指数
2
解决办法
5364
查看次数