最近在做一个实验键盘完成一个购物的流程,其中就涉及到使用键盘方向键控制ListView中的Item选中状态。本以为通过实现OnItemSelectedListener接口就可以实现功能,事实上并不能满足需求。 出现的问题是这样的: 每次进入页面,都会选中第一条,但是这时按下方向键“下”也会选中第一条,但是这时候却不会出发OnItemSelectedListener 接口中的onItemSelected方法,所以使用方向键“下”首次无法监听到事件。 到处百度、谷歌了很久未果,就自定义了一个ListView,解决了问题。 之所以出现默认选中position==0,肯定出在焦点问题上。虽然不知道google当时为什么默认选中第一个,但是确实给开发者造成了一定的困扰,有时候我们不想要那么智能,灵活性好我们能做的会更多更好。既然是焦点问题,我们就要重写PRotected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
方法,出现问题的地方只是在position==0和position==size-1,即首末两个item,我们只需要关注这两个即可,也就是getSelectedItemPosition() == 0 || getSelectedItemPosition() == getCount()-1
再去执行我们处理的方法就行了。
新闻热点
疑难解答