简体   繁体   English

数据绑定监听器

[英]DataBinding Listeners

I'm trying to use Data binding to run a function when an onClick event occurs, I'm hoping someone can tell me what I'm doing wrong here.当发生 onClick 事件时,我正在尝试使用数据绑定来运行 function,我希望有人能告诉我我在这里做错了什么。

The log item in myClick doesn't run. myClick 中的日志项不运行。

XML XML

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="myBinding"
            type="com.example.deletebindingtest.MyFragment" />
    </data>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MyFragment"
        android:orientation="vertical">

        <Button
            android:id="@+id/my_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button"
            android:onClick="@{(view) -> myBinding.myClick()}"/>

    </androidx.appcompat.widget.LinearLayoutCompat>
</layout>

My Fragment我的片段

class MyFragment : Fragment() {  
  private lateinit var binding: FragmentMyBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        // Inflate view and obtain an instance of the binding class
        binding = DataBindingUtil.inflate(
            inflater,
            R.layout.fragment_my,
            container,
            false
        )

        binding.lifecycleOwner = viewLifecycleOwner
        return binding.root
    }


    fun myClick() {
        Log.i("TEST", "Its working")
    }
}

When I click on the extension in the XML it takes me to myClick function.当我单击 XML 中的扩展名时,它会将我带到 myClick function。

a Quick fix is on onCreateView add binding.myBinding=this快速修复onCreateView添加binding.myBinding=this

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    // Inflate view and obtain an instance of the binding class
    binding = DataBindingUtil.inflate(
        inflater,
        R.layout.fragment_my,
        container,
        false
    )

    binding.lifecycleOwner = viewLifecycleOwner
    binding.myBinding=this // here
    return binding.root
}

also I prefer listener binding you can check it here我也更喜欢监听器绑定,你可以在这里查看

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM