Android 双向绑定-数据绑定

Android 双向绑定-数据绑定,android,kotlin,android-databinding,Android,Kotlin,Android Databinding,好吧,我现在正在试验双向数据绑定,从逻辑上讲,我认为代码中的一切都是完美的,但不知何故,每当我运行应用程序时,我总是会遇到相同的错误:“执行org.jetbrains.kotlin.gradle.internal.KaptExecution时发生故障”。基本上,如果数据库中没有数据,我会使用ofc数据绑定来隐藏ImageView的可见性 fragment\u list.xml(绑定布局) 绑定适配器 @BindingAdapter("emptyDatabase") @JvmStati

好吧,我现在正在试验双向数据绑定,从逻辑上讲,我认为代码中的一切都是完美的,但不知何故,每当我运行应用程序时,我总是会遇到相同的错误:“执行org.jetbrains.kotlin.gradle.internal.KaptExecution时发生故障”。基本上,如果数据库中没有数据,我会使用ofc数据绑定来隐藏ImageView的可见性

fragment\u list.xml(绑定布局)

绑定适配器

   @BindingAdapter("emptyDatabase")
   @JvmStatic
   fun emptyDatabase(view: View, emptyDatabase: MutableLiveData<Boolean>){
       if(emptyDatabase.value == true){
           view.visibility = View.VISIBLE
       }else{
           view.visibility = View.INVISIBLE
       }
   }
@BindingAdapter(“清空数据库”)
@JvmStatic
fun emptyDatabase(视图:视图,emptyDatabase:MutableLiveData){
if(emptyDatabase.value==true){
view.visibility=view.visibility
}否则{
view.visibility=view.INVISIBLE
}
}

我记得我和kapt有过类似的问题。请清理您的构建并重试,这对我很有用。同样根据您为emptyDatabase.value==true描述的场景,view.visibility应该是view.insivisible。

在(4:29)观看此视频后:

我发现我忘了为数据绑定添加此依赖项:

//DataBinding
kapt "com.android.databinding:compiler:3.2.0-alpha10"
即使在我添加了依赖项之后,我仍然有一个错误,直到我从
“@={listViewModel.emptyDatabase}”中删除了
“=

emptyDatabase=“@={listViewModel.emptyDatabase}”


“=”仅适用于android模型双向数据绑定。“=”表示如果模型通过get调用更新其更新视图,如果视图通过set调用更新其更新模型。它不适用于数据绑定适配器功能

已尝试重建项目,并关闭/运行android Studio。没用。当我从“@={listViewModel.emptyDatabase}”中删除“=”时,它会运行应用程序。但是仍然没有好的结果。。这很奇怪,对吧?
class ListFragment : Fragment(), SearchView.OnQueryTextListener {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val listViewModel = ViewModelProvider(this).get(ListViewModel::class.java)
        val binding = FragmentListBinding.inflate(inflater, container, false)
        binding.lifecycleOwner = this
        binding.listViewModel = listViewModel

        val toDoViewModel= ViewModelProvider(this).get(ToDoViewModel::class.java)
        // Observing LiveData object for Room DB which is reading all data
        toDoViewModel.allData.observe(viewLifecycleOwner, Observer { data ->
            // Using checkDatabase method from ListViewModel
            listViewModel.checkDatabase(data)
        })

        return binding.root
    }
   @BindingAdapter("emptyDatabase")
   @JvmStatic
   fun emptyDatabase(view: View, emptyDatabase: MutableLiveData<Boolean>){
       if(emptyDatabase.value == true){
           view.visibility = View.VISIBLE
       }else{
           view.visibility = View.INVISIBLE
       }
   }
//DataBinding
kapt "com.android.databinding:compiler:3.2.0-alpha10"