最佳答案
到目前为止,我已经在这上面花了6个小时,除了路障什么也没碰到。一般前提是,ListView
中有一些行(无论是由适配器生成的,还是作为头视图添加的)包含一个 EditText
小部件和一个 Button
。我所要做的就是能够使用 jogball/Arrow,像平常一样导航选择器到单独的项目,但是当我到达一个特定的行——即使我必须明确地标识该行——有一个可定焦的子行时,我希望这个子行能够获得焦点,而不是用选择器指示位置。
我试过很多种可能性,但到目前为止都没有结果。
布局:
<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);
假设适配器中还有其他条目,使用箭头键将按照预期将选择项向上/向下移动到列表中; 但是当到达头行时,它也会显示在选择器中,无法使用 jogball 将焦点集中到 EditText
中。注意: 点击 EditText
威尔在这一点上的焦点,但这依赖于一个触摸屏,这不应该是一个要求。
ListView
在这方面显然有两种模式:
1.选择器从不显示,但是当使用箭头时,EditText
可以获得焦点。焦点搜索算法很难预测,并且没有视觉反馈(对于任何行: 是否有可聚焦的孩子)选择哪个项目,这两者都会给用户带来意想不到的体验。
2.选择器总是在非触摸模式下绘制,而且 EditText
永远不能获得焦点——即使你点击它。
更糟糕的是,调用 editTextView.requestFocus()
将返回 true,但实际上并没有给出 EditText 焦点。
我所设想的基本上是1和2的混合体,在这里我不想设置 所有条目是否可聚焦,而是想为列表中的 单身条目设置可聚焦性,这样选择器就可以无缝地从选择不可聚焦条目的整行过渡到选择包含可聚焦子条目的聚焦树。
Any takers?