【问题标题】:Create setOnClickListener in Binding在 Binding 中创建 setOnClickListener
【发布时间】:2020-05-28 12:54:27
【问题描述】:

希望是一个简单的查询;在我的 Fragment 中,我设置了一些点击监听器:

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        Log.d(TAG, "onCreateView()")
        activity?.let {
            businessViewModel = ViewModelProvider(it).get(BusinessViewModel::class.java)
            Log.d(TAG, "businessViewModel = ${businessViewModel.toString()}")
        }

        // Inflate the layout for this fragment
        val binding: SitesFragmentBinding = DataBindingUtil.inflate(
            inflater, R.layout.sites_fragment, container, false
        )

        binding.apply {
            sitesOverflowOptionsMenuButton.setOnClickListener {
                showPopUp(it)
                Log.d(TAG, "sitesOverflowOptionsMenuButton clicked, showPopUp(it)")

            }

            sitesDrawerMenuButton.setOnClickListener {
                (activity as BusinessActivity).openCloseNavigationDrawer()
                Log.d(TAG, "sitesDrawerMenuButton clicked, openCloseNavigationDrawer()")
            }

            sitesFloatingActionButtonAdd.setOnClickListener {
                businessViewModel.getCurrentSite("")
                navController.navigate(R.id.action_sitesFragment_to_siteAddEditFragment)
                Log.d(TAG,"sitesFloatingActionButtonAdd clicked, navigating to siteAddEditFragment")
            }

            sitesClearIconImageView.setOnClickListener {
                sitesSearchFilterEditTextView.text.clear()
            }

            sitesFilterIconImageView.setOnClickListener {
                filterDialog()
            }


            sitesFilterIconImageView.setOnLongClickListener{
            
            // This doesn't work - type mismatch, required Boolean, found Unit
            
            }

        }

        return binding.root
    }

如上,setOnClickListener 的类型不匹配,(必填布尔值,已找到 Unit)。

它建议创建一个扩展函数,但我似乎无法让它工作..

【问题讨论】:

    标签: android kotlin binding onlongclicklistener


    【解决方案1】:

    只需在 lambda return 中返回一个布尔值。

    sitesFilterIconImageView.setOnLongClickListener{
       //Your other code
       false
    }
    

    【讨论】:

    • 你也可以返回true,我在示例中返回了false...为了示例目的。
    • 是的,对不起-我的意思是如果你输入'return true'或'return true'它不起作用(这是我所期望的!)..只是删除'return'的一个例子..塔!
    • 您不需要在 lamdba 中包含 return 语句。无论 lambda 中的最后一行代码返回什么,都将是整个 lambda 的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    相关资源
    最近更新 更多