【问题标题】:Data binding error with feature module功能模块的数据绑定错误
【发布时间】:2018-07-27 12:16:22
【问题描述】:

xml布局文件和视图持有者都是正确的,所以我仍然不知道为什么我会收到这个错误。

我的同事都已经仔细检查过了。我创建了一个包含应用程序模块的模块,现在出现了这个错误。

如果有任何想法或帮助,我将不胜感激!

错误:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':apk_holder:compileBetaDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
  ****/ data binding error ****msg:Could not find accessor com.laurence.ui.TitleMvvm.ViewModel.onClick and java.lang.Object has 0 abstract methods, so is not resolved as a listener
  file:D:\laur\Documents\Apps\TestApp\app\src\main\res\layout\title.xml
  loc:17:23 - 17:33
  ****\ data binding error ****
  ****/ data binding error ****msg:Could not find accessor com.laurence.ui.NotesMvvm.ViewModel.onClick and java.lang.Object has 0 abstract methods, so is not resolved as a listener
file:D:\laur\Documents\Apps\TestApp\app\src\main\res\layout\activity_notes.xml
      loc:21:23 - 21:33
      loc:61:27 - 61:37
      ****\ data binding error ****
      ****/ data binding error ****msg:Could not find accessor com.laurence.ui.SplashMvvm.ViewModel.onClick and java.lang.Object has 0 abstract methods, so is not resolved as a listener
      file:D:\laur\Documents\Apps\TestApp\app\src\main\res\layout\activity_splash.xml
      loc:26:31 - 26:52
      ****\ data binding error ****
      ****/ data binding error ****msg:Could not find accessor com.laurence.ui.NewMvvm.ViewModel.onClick and java.lang.Object has 0 abstract methods, so is not resolved as a listener
  file:D:\laur\Documents\Apps\TestApp\app\src\main\res\layout\fragment_new.xml
      loc:31:35 - 31:52
      ****\ data binding error ****

title.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="vm"
            type="com.laurence.ui.TitleMvvm.ViewModel" />
    </data>
    <android.support.constraint.ConstraintLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:onClick="@{vm::onClick}">
    </android.support.constraint.ConstraintLayout>
</layout>

TitleScreen.kt

interface TitleMvvm {
    interface View : MvvmView

    interface ViewModel : MvvmViewModel<View>{
        @get:Bindable
        val isClickableSection: Boolean

        fun onClick()
    }
}

class TitleDelegate : BaseActivity<TitleViewHolder> {

    override fun createViewHolder(parent: ViewGroup): TitleViewHolder = Utils.createViewHolder(parent, R.layout.title, ::TitleViewHolder)

    override fun bindViewHolder(viewHolder: TitleViewHolder, list: List<SectionItem>, position: Int) {
        viewHolder.viewModel.update(list[position])
    }
}

class TitleViewHolder constructor(itemView: View) : BaseViewHolder<TitleBinding, TitleMvvm.ViewModel>(itemView), TitleMvvm.View {

    init {
        viewHolderComponent.inject(this)
        bindContentView(itemView)
    }
}

@PerViewHolder
open class TitleViewModel
@Inject
constructor(private var navigator: Navigator,
            private var urlHandler: UrlHandler) : BaseViewModel<TitleMvvm.View>(), TitleMvvm.ViewModel {

    override fun onClick() {
        if (isClickableSection) {
           // yet to do something
        }
    }
}

【问题讨论】:

  • 你在xml中添加android:onClick="someMethod()"了吗?
  • 能否提供活动类代码和xml
  • @ND1010_ 添加了代码
  • 好的检查请尝试我的回答
  • 我会在 5 分钟内完成 :)

标签: java android android-studio kotlin android-databinding


【解决方案1】:

遇到同样的问题。

所以解决方案是更改为 Project View -> Remove/Delete .Gradle.idea 文件夹 -> 重建项目 -> 完成

app:onClick="@{vm::onClick}" 替换为android:onClick="@{vm::onClick}"

【讨论】:

  • 你好@Laurence,你必须用android而不是app替换前缀
  • 而且我认为他应该将View参数传递给onClick()方法,因为他是从xml引用方法。
猜你喜欢
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多