android - Android / Kotlin - 通过按下导航菜单按钮失去对文本字段的关注后,片段未附加到活动
问题描述
我的 Android 应用程序有问题。
我有一个作为可编辑文本视图列表生成的片段。每个 textview 都有一个setOnFocusChangeListener调用服务器上的 API。 FocusChangedListener在最后一个 textview 上正常工作,之后我的 textview 保持焦点,如下图所示。
问题
现在我必须通过单击右侧的菜单按钮来更改菜单(片段)。当单击按钮并且即将加载新菜单时,我的 textview 失去焦点并调用 API,但我不希望我的应用程序这样做。如果我单击菜单按钮是因为我必须更改它并且我希望我的旧片段消失或基本上不执行 FocusChangedListener。
有任何想法吗?
解决方案
我做了一个小技巧来解决这个问题。我刚刚在我的 DrawerMenu 的 OnCreate 中添加了这段代码,然后我设置了一个全局变量“ drawerOpened ”来每次检查我的菜单是否打开。
// Initialize the action bar drawer toggle instance
val drawerToggle:ActionBarDrawerToggle = object : ActionBarDrawerToggle(
this,
drawer_layout,
toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
){
override fun onDrawerClosed(view:View){
super.onDrawerClosed(view)
GlobalVar.drawerOpened = false
}
override fun onDrawerOpened(drawerView: View){
super.onDrawerOpened(drawerView)
GlobalVar.drawerOpened = true
currentFocus?.clearFocus() //clear focus - any view having focus
}
}
然后在我的 HomeFragment 中我这样做了:
// if GlobalVar.drawerOpened is false then setOnFocus
if (field.validatefield || field.nextpage != 0)
{
textView.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus && !GlobalVar.drawerOpened)
{
if ((field.mandatory && !textView.text.toString().isNullOrEmpty()) || (!field.mandatory)) {
if (field.validatefield) {
validateField(field.fieldcode, textView.text.toString(), field.nextpage)
} else {
_goToNextPageNo = field.nextpage
goToNextPageIfExist()
}
}
}
}
}
这不是一个完整的解决方案,但它工作正常。
推荐阅读
- sql - 在 postgresql 中获取两个用户之间对话中的最新消息
- python - 通过将 DataFrame 更改为 ColumnDataSource 数据来使用 Bokeh Slider 小部件
- objective-c - 通过Coregraphic画线:在renderInContext崩溃
- java - 随着深度的增加生成四分位数位置
- mysql - mySQL - 1067 - 'updated_at' 的默认值无效
- java - httpclient 提供不同的结果
- php - PHP $_POST 没有收到数据
- python - Postgresql 更新原因:'django.db.utils.OperationalError: could not access file "$libdir/postgis-2.4": No such file or directory'
- spring-security-oauth2 - 在重定向之前在标头中设置令牌
- python - 函数返回列表中有多少个整数元素是同一列表中其他元素的精确平方