这里是 Kotlin 的新手,所以请多多包涵。我从使用 Android Studio 中的 Fragments 的默认 Kotlin 应用程序开始。我从这里开始学习数据绑定教程,但也学习了许多其他教程:我在 build.gradle 中启用了数据绑定,创建了一个扩展 BaseObservable(称为 RestClientSettings)的 POJO,并将我的工具片段切换到数据绑定布局:
...
<data class="ToolsBinding">
<variable name="model" type="com.example.tpm.ui.tools.RestClientSettings" />
<variable name="viewModel" type="com.example.tpm.ui.tools.ToolsViewModel"/>
</data>
...
使用我模型中的“主机”属性的 EditText:
...
<EditText
android:layout_weight="2"
android:id="@+id/edit_host"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="@={model.host}"
tools:layout_editor_absoluteX="187dp"
tools:layout_editor_absoluteY="45dp" />
...
最后在我的 ToolsFragment:OnCreate 我正在使用 DataBinding util
...
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val toolBinder : ToolsBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_tools,container,false)
return toolBinder.root
}
...
这是 RestClientSettings 类:...
package com.example.tpm.ui.tools
import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import com.example.tpm.BR
class RestClientSettings : BaseObservable() {
var host: String = "0.0.0.0"
@Bindable get() = field
set(host) {
field = host
notifyPropertyChanged(BR.host)
}
var port: Int = 8080
@Bindable get() = field
set(port) {
field = port
notifyPropertyChanged(BR.port)
}
}
...
到目前为止一切顺利,但我收到以下错误:RestClientSettings 类中的“*”未解析的引用:BR和我的 ToolsBindingImpl 中的“无法解析符号主机”,在 onChageModel 函数中:“ else if (fieldId == BR .host) ”。
我还注意到,可能是真正的问题是在 ToolsBindingImpl 类的顶部,它试图从 ToolsBinding 继承“公共类 ToolsBindingImpl 扩展 ToolsBinding ”,我收到错误:“无法从最终的 'com.example 继承” .tpm.databinding.ToolsBinding' "
我在这里想念什么?