我已经花了大约6个小时的时间,但一直遇到问题。总体思路是,在 ListView
中有一行(无论是适配器生成的还是作为标题视图添加的),其中包含一个EditText
小部件和一个Button
。我想做的就是能够像平常一样使用jogball /方向键来导航选择器到各个项目,但当我到达一个特定的行--即使我必须明确标识该行--具有可聚焦子项时,我希望该子项将获得焦点而不是使用选择器指示位置。
我尝试了许多可能性,但到目前为止都没有成功。
布局:
<ListView
android:id="@android:id/list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
/>
标题视图:
EditText view = new EditText(this);
listView.addHeaderView(view, null, true);
假设适配器中有其他项,使用箭头键将在列表中向上/向下移动选择,正如预期的一样;但当到达标题行时,也会显示选择器,并且无法使用轨迹球聚焦到EditText
。注意:点击EditText
将在该点聚焦它,但这依赖于触摸屏,这不应是必需的。
ListView
在这方面显然有两种模式:
1. setItemsCanFocus(true)
:选择器从不显示,但使用箭头时可以使EditText
获得焦点。聚焦搜索算法难以预测,并且没有任何可视反馈(对于任何行:具有可聚焦子项或不具备可聚焦子项的情况)告知哪个项目已被选中,这两个问题都可能导致用户体验出现意外情况。
2. setItemsCanFocus(false)
:选择器始终以非触摸模式绘制,即使您点击它,EditText
也永远无法获取焦点。
更糟糕的是,调用editTextView.requestFocus()
将返回true,但实际上并不会给EditText
聚焦。
我所设想的基本上是1和2的混合体,即不是列表设置是否所有项目都可聚焦,而是要为列表中的单个项目设置可聚焦性,以便选择器在非可聚焦项中从选择整行过渡到遍历具有可聚焦子项的项目的聚焦树。
有人愿意接受这个挑战吗?
OnItemSelectedListener
并没有改变这一点。然而,Iogan 的简单解决方案非常有效,谢谢! - Gubbelandroid:descendantFocusability
属性,使我在ListView中的EditText可以正确地解决键盘问题,并且我已经点赞了两个。android:descendantFocusability
本身无法解决问题,而我对于必须处理的14个EditText都不热衷于重写onItemSelected
。 :) 谢谢! - Thomson Comer