Tag: 数据绑定

在Android Databinding中绑定ObservableList的大小

我怎样才能在我的视图绑定一个ObservableList的大小? 我在我的android应用程序中使用ObservableList的数据绑定库,如下所示: // ViewModel class ViewModel { … public final ObservableList<Item> items = new ObservableList<>() … } 和我的观点 // View <layout> <data> <variable name="viewmodel" type="com.myapp.ViewModel" /> </data> <TextView … android:text="@{viewmodel.items.???}" /> </layout> 在视图TextView我想显示项目列表的大小。 我尝试使用android:text="viewmodel.items.size或“ viewmodel.items.size()但这并不奏效,我该怎么做?

不能生成视图绑定器java.lang.NullPointerException

突然,我得到这个错误,同时重建我的项目。 任何人都有这方面的经验? 在我的项目中,我使用Kotlin 1.1.51和Data Binding Error:error: cannot generate view binders java.lang.NullPointerException Error:java.lang.RuntimeException: failure, see logs for details. Error:org.gradle.api.GradleException: Internal compiler error. See log for more details 谁低估了我的问题,请看下面的图片。 这是Android Studio构建错误,而不是由我的错误代码引起的异常 这是Gradle控制台消息: e: error: cannot generate view binders java.lang.NullPointerException e: e: at android.databinding.tool.store.SetterStore.getMatchingMultiAttributeSetters(SetterStore.java:642) e: at android.databinding.tool.store.SetterStore.getMultiAttributeSetterCalls(SetterStore.java:529) e: at android.databinding.tool.BindingTarget.resolveMultiSetters(BindingTarget.java:226) e: at android.databinding.tool.LayoutBinder.<init>(LayoutBinder.java:249) e: at android.databinding.tool.DataBinder.<init>(DataBinder.java:52) e: at […]

JavaFX绑定和空值

我想知道如何绑定绑定的来源可能为null的值。 我有一个属性: private ObjectProperty<Operation> operation = new SimpleObjectProperty<>(null); 我也有一个文本字段: @FXML private Text txtCurrentOperation; 我想将字段的textProperty绑定到操作对象的值。 我的第一个想法是使用FluentAPI的时候/然后/否则构造,但它是热切的评价,所以解决方案: Bindings.when(operation.isNotNull()) .then("null") .otherwise(operation.get().getName())); 会抛出一个NPE,因为不管什么时候的结果, otherwise参数都被评估。 我的下一个想法是不知何故使用lambda: txtCurrentOperation.textProperty().bind(() -> new SimpleStringProperty( operation.isNotNull().get() ? "Null" : operation.get().getName() )); 但绑定没有启用lambda的解决方案。 (后来我意识到它不可能有,因为真正的工作倒退:绑定对象(操作)的更改将触发活页夹(字段文本属性)的更新。) 我发现一些文章建议使用属性的“极值”值而不是null。 但是Operation是一个复杂而重量级的组件,所以构造一个人工实例来表示null是不平凡的。 更重要的是,这在我看来锅炉代码,这是一个绑定机制旨在帮助消除。 我的下一个尝试是逻辑交换绑定的方向,并添加侦听器的操作属性,并让它以编程方式更新字段。 它的工作原理相当简单,只要更新的需要只取决于操作对象实例: operation.addListener((e) -> { txtCurrentOperation.setText(operation.isNull().get() ? "Null" : operation.get().getName()); }); operation.set(oper); 它比较简单,但不起作用:它会抛出“无法设置绑定值”。 例外,我不明白为什么控制的文本属性被视为绑定。 我跑出了想法。 经过大量的搜索,我仍然不能解决简单的问题来根据源是否为空来不同地更新文本字段。 这似乎是如此简单和日常的问题,我相信我错过了解决方案。

如何使用数据绑定库观察房间数据库中的LiveData更改

第一次实施房间和数据绑定。 在我的ViewModel : var numberOfClubs = ObservableInt(0) private var clubs: LiveData<List<Club>> = clubDao.getAllClubs() 然后我尝试在插入到Room数据库后获得clubs.value ,但每次都得到一个KotlinNullPointerException 。 fun addClubs() { Observable.fromCallable({ clubDao.insertClubs(listOf(Club(null, "clubName")) }) .subscribeOn(schedulerFacade.computation) .subscribe( { numberOfClubs.set(clubs.value!!.size) <— Kotlin NPE }, { error -> logWrapper.e("MainViewModel", error.message!!) clubError.set(true) }) } 在我的XML中,我打电话: android:text="@{viewModel.numberOfClubs}" 。 由于插入到房间数据库不会导致任何东西被返回,我不能设置numberOfClubs与结果。 我认为clubs应该跟踪变化?

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

DataBinding在我的项目中工作得很好,但今天升级Android Studio 2.3之后。 运行“应用程序”失败,因为以下错误: Error:(15, 40) Error: package com.javan.myrecorder.databinding not exist. import com.javan.myrecorder.databinding.FragmentEventsBinding; :app:compileMockDebugJavaWithJavac FAILED 我只是升级android工作室,并没有改变任何东西。 所有的插件是最新的! 现在我的问题是,为什么发生这个错误,我怎么能解决它? 任何帮助,欢迎! 英语不是我的母语; 请原谅我的错误。 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' } 我的项目中的一些文件: gradle-wrapper.properties #Mon Mar 06 10:59:04 CST […]

Android Databinding:在方法参数中使用三元运算符时发生ConcurrentModificationException

我在布局文件中使用数据绑定。 以下是相关的代码片段: <ImageButton android:id="@+id/btn_cross" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_close_white" app:onClick="@{(v) -> gameManager.dismissAndDestroyDialog()}" app:tapEvent="@{(v) -> eventUtils.sendEvent(viewModel.state == State.IN_PROGRESS ? Source.GAME_LOADING : Source.GAME_LOADING_ERROR)}"/> viewModel :这是我的viewModel这个布局。 tapEvent :我正在使用绑定适配器。 Source :一个枚举类State :一个枚举类 当我执行这个时,我得到以下异常: e: error: cannot generate view binders java.util.ConcurrentModificationException e: e: at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437) e: at java.util.HashMap$ValueIterator.next(HashMap.java:1466) e: at android.databinding.tool.expr.CallbackExprModel.seal(CallbackExprModel.java:63) e: at android.databinding.tool.expr.LambdaExpr.setup(LambdaExpr.java:154) e: at android.databinding.tool.Binding.resolveCallbackParams(Binding.java:93) e: at android.databinding.tool.BindingTarget.resolveCallbackParams(BindingTarget.java:175) e: at […]

在子模块中的Android数据绑定

我有一个应用程序模块,让我们说“测试”。 “测试”模块依赖于子模块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: […]

双向数据绑定与EditText

我正在使用Kotlin开发一个简单的Android应用程序。 我想使用数据绑定,但我不能让他们与EditText工作 这是我的XML布局 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="de.knerd.applicationmanager.models.AgencyModel"/> <variable name="agency" type="AgencyModel"/> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_add_agency" tools:context="de.knerd.applicationmanager.activities.AddAgencyActivity" android:orientation="vertical" android:layout_margin="16dp"> <android.support.design.widget.TextInputLayout android:layout_height="match_parent" android:layout_width="match_parent"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/name" android:labelFor="@+id/name" android:hint="@string/agency_name" android:text="@={agency.name}"/> </android.support.design.widget.TextInputLayout> </RelativeLayout> </layout> 这是我的Model类 package de.knerd.applicationmanager.models import android.databinding.BaseObservable import android.databinding.Bindable import com.j256.ormlite.dao.ForeignCollection import com.j256.ormlite.field.DatabaseField import com.j256.ormlite.field.ForeignCollectionField import com.j256.ormlite.table.DatabaseTable […]

找不到类databinding.FragmentBinding

我试图在我的片段中使用数据绑定,但在运行时出现以下错误: Could not find class 'com.example.databinding.FragmentUpSellBinding', referenced from method com.example.UpSellFragment.onCreateView 其结果是: FATAL EXCEPTION: main Process: nl.anwb.fietsen.debug, PID: 5563 java.lang.IllegalStateException: DataBindingUtil.inflate(…r, false) must not be null` 我的build.gradle看起来像这样: apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { dataBinding { enabled = true } } kapt { generateStubs = true } dependencies { […]

android数据绑定单元测试错误解析数据绑定编译器选项失败。 PARAMS:

当我尝试为我的kotlin android项目设置单元测试时,遇到以下错误。 以前有没有遇到过这样的问题? 这已被标记为官方错误跟踪器的错误 失败:生成失败,出现异常。 * 什么地方出了错: 执行失败的任务':app:compileDebugUnitTestJavaWithJavac'。 > java.lang.RuntimeException:无法解析数据绑定编译器选项。 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 *尝试: 运行–info或–debug选项来获得更多的日志输出。 *例外是: org.gradle.api.tasks.TaskExecutionException:对于任务“:app:compileDebugUnitTestJavaWithJavac”,执行失败。 在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:84) 在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55) 在org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) 在org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 在org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) 在org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46) 在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51) 在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 在org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 在org.gradle.execution.taskgraph.DefaultTaskGraphExeter $ $ EventFiringTaskWorker $ […]