android – 获得最后焦点的孩子

android – 获得最后焦点的孩子,第1张

概述我发现当使用d-pad或轨迹球在我的应用程序中导航时如果向右移动并且列表视图失去焦点,当列表视图重新获得焦点时,不同的孩子将获得焦点而不是最后一个焦点.我尝试使用onFocusChange(…)来保存哪个孩子有焦点,但看起来直到焦点丢失后才调用它,所以我永远无法抓住哪个孩子最后有焦点.有没有办法抓住谁有焦点,所以我可以在列表视图再次抓住焦点后,在子节点上调用requestFocus()? 不幸的是 我发现当使用d-pad或轨迹球在我的应用程序中导航时如果向右移动并且列表视图失去焦点,当列表视图重新获得焦点时,不同的孩子将获得焦点而不是最后一个焦点.我尝试使用onFocusChange(…)来保存哪个孩子有焦点,但看起来直到焦点丢失后才调用它,所以我永远无法抓住哪个孩子最后有焦点.有没有办法抓住谁有焦点,所以我可以在列表视图再次抓住焦点后,在子节点上调用requestFocus()?

不幸的是我不能使用处理程序,因为这不是一个很常用的功能,我不想牺牲较小功能的性能.

这是我没有工作的代码(不管是什么,focusedVIEw总是为null):

mainListVIEw.setonFocuschangelistener(new OnFocuschangelistener() {        public voID onFocusChange(VIEw v,boolean hasFocus) {            if(focusedVIEw == null ) { Log.i("focus","focusedVIEw == null"); }            if(hasFocus && focusedVIEw != null) {                Log.i("focus","Focus has been RecIEved.............");                focusedVIEw.requestFocus();            } else {                // Focus has been lost so save the ID of what the user had selected                Log.i("focus","Focus has been Lost.............");                focusedVIEw = mainListVIEw.findFocus();            }        }    });

谢谢!

解决方法 我认为你有自己的答案,因为焦点监听器在失去焦点后被调用,因此没有孩子会聚焦,因此.findFocus()将返回null.

我最好的办法是扩展ListVIEw类,并覆盖onFocusChanged方法.基本上做你正在做的事情,但是当gainFocus为真时在其中做.

@OverrIDeprotected voID onFocusChanged (boolean gainFocus,int direction,Rect prevIoUslyFocusedRect) {     if(gainFocus)         focusedVIEw = mainListVIEw.findFocus();}

This one

总结

以上是内存溢出为你收集整理的android – 获得最后焦点的孩子全部内容,希望文章能够帮你解决android – 获得最后焦点的孩子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126334.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存