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