首页 > 解决方案 > 如何在 Kotlin 中为 TextInputField 设置 OnClickListener

问题描述

当用户单击文本输入字段时,我试图在活动中请求权限(使用 easyPermissions)。我当前的代码如下所示:

class PageFragment : Fragment(), EasyPermissions.PermissionCallbacks {

    private lateinit var viewModel: PageViewModel
    private lateinit var binding: PageBinding
    private lateinit var interpreter: PageInterpreter
    private val messagesCoordinator: MessageCoordinator by lazy {
        MessageCoordinator(viewModel, interpreter)
    }

    companion object {
        private const val RC_READ_PERMISSIONS = 102
        @JvmStatic
        fun newInstance() = PageFragment().apply {
            arguments = Bundle().apply {
            }
        }
    }

    interface PageCallback {
        fun goBack()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_page, container, false)
        return binding.root
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
    }

    @AfterPermissionGranted(RC_READ_PERMISSIONS)
    private fun getPermissions() {
        Log.i("Permission asked","Get Permission function activated")
        context?.let {
            if (EasyPermissions.hasPermissions(it, android.Manifest.permission.READ_CONTACTS)) {
                //TODO
            } else {
                EasyPermissions.requestPermissions(this, it.getString(R.string.fragment_page_explanation), RC_READ_PERMISSIONS,
                    android.Manifest.permission.READ_CONTACTS)
            }
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        Log.i("View Created","View has been created")
        editName.setOnClickListener {
            Log.i("Name","on click listener activated")
            this.getPermissions()
        }
    }

    override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
        //TODO
    }
    override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
        //TODO
    }
}

基本上,我在片段布局上有 6 个输入字段,我希望询问用户是否点击了任何文本输入字段。在这里,我只尝试一个。

谢谢,

费拉斯 A.

标签: androidandroid-studiokotlin

解决方案


据我了解,如果您确定所有 EditTexts 的行为都相同,则可以创建 clickListener 的单个实例,并将其设置为 EditTexts。

    val clickListener = View.OnClickListener {
        Log.i("Name","on click listener activated")
        this@PageFragment.getPermissions()
    }

    editName.setOnClickListener(clickListener)
    editSomethingElse.setOnClickListener(clickListener)
    editSurname.setOnClickListener(clickListener)

甚至创建类似 EditTexts 的列表并使用以下设置侦听器:

    listOf(editName,  editSomethingElse, editSurname).map {
        it.setOnClickListener(clickListener)
    }

编辑 可能是这样吗?还有一个相关的话题


推荐阅读