android - 如何在 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.
解决方案
据我了解,如果您确定所有 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)
}
推荐阅读
- docker - 如何在 2 个不同的执行器上并行运行单个作业?
- java - org.jooq.impl.ParserException: Token ')' 预期: [1:11] select (@i[*]:=@i+1)
- java - 如何使用 FMPP Java API 动态加载数据?
- machine-learning - 如何使用节点嵌入进行链接预测?
- clojurescript - 如何使用#js 文字从地图中获取值
- c# - 使用 EPPlus c# 将整个数据集转换为 Excel 并将其存储在 Azure blob 中
- java - 在 doOnNext() 中没有为 Subject 调用 Consumer.accept()
- ruby-on-rails - 如何在 ruby on rails 中使用 wicked_pdf 为封面提供自定义边距
- php - 将翻译的分类重定向到分类文件
- bash - 尝试将变量作为 URL 的一部分传递时出现 CURL 错误“URL 使用错误/非法格式或缺少 URL”