Tag: android databinding

在Kotlin中绑定具有多个参数的适配器

要为数据绑定适配器使用多个参数,Java语法是 @BindingAdapter(value={“arg1”, “arg2”}, requireAll = false) 但是这在Kotlin中没有被编译: Error:(13, 37) Unexpected tokens (use ‘;’ to separate expressions on the same line) Kotlin中多个参数的正确语法是什么?

数据绑定:带有lambda值的ObservableField不能编译

我试图通过计算将一个参数作为参数的lambda来定义View的可见性。 顺便说一下 , 我正在使用Kotlin 。 在我的ViewModel我有: val customerPropVisibility: ObservableField<(KProperty1) -> Int> = ObservableField( { _ -> // body of the lambda }) 该View的绑定expression式如下所示: android:visibility=”@{vm.customerPropVisibility.invoke(title)}” vm和title被正确地声明为布局data标签中的variables。 在编译时,我得到两个错误: 1)不兼容的types:对象不能转换为Function1 2)不兼容的types:对象不能被转换为整数 第一种types只有一个错误,第二种types有几个错误。 第二种types的错误数量与布局xml文件中lambda的调用数量相同。 我试图解决这个问题: 显然,types1的错误可以通过重写ObservableField的get()方法来解决(使方法明确地返回Function1 )。 这是有效的,但是很难看,编译器在推断customerPropVisibility的types时应该这样做。 当然,这里有些不对劲。 types2的错误对我来说是一个谜,导致函数types(my lambda)显式地返回Int。 我认为这与Kotlin / Java的互操作性有关。 如果您遇到同样的问题,请分享解决问题的经验。 编辑: 由于这个bug还没有解决,我使用稍微不同的方法来达到相同的结果: 而不是将ObservableField的值设置为lambda,我将其设置为函数引用( ::getVisibility ),如下所示: fun getVisibility(prop: KProperty1): Int = propVisibilityValues[prop] ?: View.GONE val […]

在android布局中使用kotlin的Unit(或任何其他对象)types

研究Kotlin的Unittypes,这是一个基本上代表Java的void的object 。 在某些情况下,我想在onClick数据绑定中使用PublishSubject来基本上只是点击点击。 Android的XML看起来像这样: viewModel.navigateSubject.onNext(Unit)}” /> 在layout我介绍了这种types: […] 然而,以这种方式对象types的调用当然是不可能的,有没有人find一种方法来使用android xml Unittypes?

Android数据绑定不适用于Kotlin的class级授权

我的ViewModel: class MyVM( app: Application, private val observableImpl: BaseObservable, /* other colaborators*/ ) : AndroidViewModel(app), Observable by observableImpl { var currencyCode: String by Delegates.observable(“”) { _, _, newValue -> /* business logic methods */ notifyPropertyChanged(BR.currencyCode) } @Bindable get } 我的布局: 当currencyCode在数据模型中更新时, TextView不会自动更改文本。 我试图摆脱从AndroidViewModelinheritance和定义MyVM ,如下所示: class MyVM(/* other colaborators*/) : BaseObservable() { } 它的工作。 问题是,我不能丢弃我的生产代码中的AndroidViewModel的inheritance。 尽管有一个解决方法: […]

Android Studio在layout.xml中显示错误

我正在使用数据绑定库,在Android Studio 3.0中遇到以下问题: somelayout.xml: … 在这个地方: android:text=”@{meeting.title}” Android Studio 3.0强调@符号并通知有关错误: Error:(29, 27) or expected, got ‘@’ 模型类是用Kotlin编写的,如果它有任何相关性的话。 代码完成也不适用于绑定类。 应用程序可以使用gradle命令和Android Studio运行应用程序按钮来成功构建。 所以这只是编辑问题 。 我在Mac上观察这个问题。 在Windows上,它工作正常。 我没有更多的电脑来检查是否与平台相关的问题。

从Android Studio运行时,Kotlin Kapt不显示数据绑定错误

我使用Kotlin kapt版本3,每当数据绑定出现问题时,Android Studio的构建失败,并出现非常通用的错误: Error:Execution failed for task ‘:app:kaptDev21DebugKotlin’. > Internal compiler error. See log for more details 当我从控制台运行相同的任务时,真正的问题就出现了。 不知何故AS不在消息窗口中显示这个错误。 我正在使用Android Studio版本2.3.3

如何在Kotlin中制作一个双向转换器? (在Java中工作)

我得到这个错误: 错误:(32,50)在类br.com.martinlabs中找不到方法indexFromModel(android.databinding.ObservableList ,br.com.martinlabs.usecase.model.GrupoDoPrincipal) .usecase.viewtools.Converters 但是我在Converters上有这个方法:(我已经尝试了一个类中的伴随对象) object Converters { fun indexFromModel(list: ObservableList, model: GrupoDoPrincipal): Int { return list.indexOfFirst { it?.id == model?.id } } @InverseMethod(“indexFromModel”) fun indexToModel(list: ObservableList, index: Int): GrupoDoPrincipal { return index.let { list[it] } } } 用法: 这个方法适用于Java: public static int indexFromModel(ObservableList list, GrupoDoPrincipal model) { for (int i = 0; i < […]

数据绑定:ButterKnife,Kotlin:不生成绑定文件

Android Studio 3.0 在项目/ build.gradle: classpath ‘com.android.tools.build:gradle:3.0.1’ 在应用程序/ build.gradle: buildscript { repositories { maven { url ‘https://maven.fabric.io/public’ } } dependencies { classpath ‘io.fabric.tools:gradle:1.+’ } } apply plugin: ‘com.android.application’ apply plugin: ‘io.fabric’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-kapt’ apply plugin: ‘realm-android’ def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(rootProject.file(“app/keystore.properties”))) android { dataBinding { enabled = true } […]

Kotlin和Android数据绑定(BuildTools 2.0.0)

在我的Android项目中,我正在使用Kotlin和Android数据绑定。 它工作得很好,但现在我想更新Android Gradle插件到版本2.0.0-beta5。 在构建项目时,出现以下错误: 例外是在这里 java.lang.RuntimeException: failure, see logs for details. cannot generate view binders java.lang.NoSuchMethodError: kotlin.text.StringsKt.split$default(Ljava/lang/CharSequence;[Ljava/lang/String;ZII)Ljava/util/List; at android.databinding.tool.ext.ExtKt.androidId(ext.kt:76) at android.databinding.tool.writer.LayoutBinderWriterKt$readableName$2.invoke(LayoutBinderWriter.kt:99) at android.databinding.tool.writer.LayoutBinderWriterKt$readableName$2.invoke(LayoutBinderWriter.kt) at android.databinding.tool.ext.LazyExt.getValue(ext.kt:27) at android.databinding.tool.writer.LayoutBinderWriterKt.getReadableName(LayoutBinderWriter.kt) at android.databinding.tool.LayoutBinder.(LayoutBinder.java:202) at android.databinding.tool.DataBinder.(DataBinder.java:49) at android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:81) at android.databinding.tool.CompilerChef.sealModels(CompilerChef.java:130) at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:149) at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154) at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139) at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66) at org.jetbrains.kotlin.annotation.AnnotationProcessorWrapper.process(AnnotationProcessorWrapper.kt:136) at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029) […]

如何使用Tab布局与数据绑定库和Kotlin

我试图在Kotlin项目中使用Tab Layout + Android Data Binding Library,但是我没有成功。 请告诉我我做错了什么? 这是我的活动: class WoActivity : BaseActivity() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = DataBindingUtil.setContentView(this, R.layout.activity_wo) as ActivityWoBinding binding.wo = WorkOrder() setSupportActionBar(binding.toolbar) supportActionBar!!.setDisplayHomeAsUpEnabled(true) binding.setHandler(this); binding.setManager(getSupportFragmentManager()); } companion object { @BindingAdapter(“handler”) @JvmStatic fun bindViewPagerAdapter(view: ViewPager, activity: WoActivity) { val adapter = WOPagerAdapter(activity.supportFragmentManager) adapter.addFragment(WoTabWoFragment.newInstance(), view.context.getString(R.string.work_order)) adapter.addFragment(WoTabScheFragment.newInstance(), view.context.getString(R.string.scheduling)) view.adapter = […]