Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么不是';t';onPropertyChanged';被叫?_Android_Kotlin - Fatal编程技术网

Android 为什么不是';t';onPropertyChanged';被叫?

Android 为什么不是';t';onPropertyChanged';被叫?,android,kotlin,Android,Kotlin,我正在编写一个具有双向数据绑定的应用程序。我可以更新编辑文本字段,但我也尝试更新内部逻辑。我试图通过调用绑定上的addOnPropertyChangedCallback(Observable.OnPropertyChangedCallback)来实现这一点,但是,尽管选中了notifyPropertyChanged(int),但Observable调用了回调 如前所述,我尝试将@Bindable注释添加到getter和setter中,但没有效果 AddItemObservable.kt Andr

我正在编写一个具有双向数据绑定的应用程序。我可以更新编辑文本字段,但我也尝试更新内部逻辑。我试图通过调用绑定上的
addOnPropertyChangedCallback(Observable.OnPropertyChangedCallback)
来实现这一点,但是,尽管选中了
notifyPropertyChanged(int)
,但Observable调用了回调

如前所述,我尝试将
@Bindable
注释添加到getter和setter中,但没有效果

AddItemObservable.kt AndroidView.kt fragment\u add\u item.xml

为了简洁起见省略了适配器


我希望调用
notifypropertychangedcallback
时调用
OnPropertyChangedCallback
并记录“更新”(当文本输入到一个
EditText
中时会发生这种情况)。

要使其工作,需要直接在
可观察的
实例上调用
addOnPropertyChangedCallback
。比如说,

val observableItem = AddItemObservable()
binding.addItem = observableItem
observableItem.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { 
    override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
        Log.i("VIEW", "updated")
    } 
}) 

如果在AddItemObservable项实例上调用
addOnPropertyChangedCallback
,则一切都应按预期进行。@ConstOrVar完成了,谢谢。如果你复制你的评论作为回答,我可以给你信用。
class AndroidView : Fragment() {

    private lateinit var binding: FragmentAddItemBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentAddItemBinding.inflate(inflater, container, false)
        binding.addItem = AddItemObservable()
        binding.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() {
            override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
                Log.i("VIEW", "updated")
            }
        })
        binding.lifecycleOwner = this

        return binding.root
    }
}
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
    <import type="tk.jonathancowling.inventorytracker.additem.AddItemObservable" />
    <variable
        name="addItem"
        type="AddItemObservable" />
</data>
<LinearLayout 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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:ems="10"
            android:hint="@string/add_item_name"
            android:inputType="textPersonName"
            android:text="@={addItem.name}"
            android:importantForAutofill="no"
            tools:ignore="UnusedAttribute" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:ems="10"
            android:hint="@string/add_item_quantity"
            android:inputType="number"
            app:add_item_quantity="@={addItem.quantity}"
            android:importantForAutofill="no"
            tools:ignore="UnusedAttribute" />
    </LinearLayout>
</layout>
val observableItem = AddItemObservable()
binding.addItem = observableItem
observableItem.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() { 
    override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
        Log.i("VIEW", "updated")
    } 
})