到目前为止,我已经在这上面花了大约 6 个小时,除了路障之外什么都没碰到。一般的前提是 a 中有一些行ListView
(无论它是由适配器生成的,还是作为标题视图添加的)包含一个EditText
小部件和一个Button
. 我想要做的就是能够使用慢跑球/箭头,将选择器导航到正常的单个项目,但是当我到达特定行时——即使我必须明确识别该行——具有焦点孩子,我希望那个孩子能够集中注意力,而不是用选择器指示位置。
我尝试了很多可能性,但到目前为止都没有运气。
布局:
<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 的混合,而不是列表设置是否所有项目都可聚焦,我想为列表中的单个项目设置可聚焦性,以便选择器从选择无缝过渡整行用于不可聚焦的项目,并遍历包含可聚焦子项的项目的焦点树。
有接盘侠吗?