一个小问题引发的"Listview里有多个Edittext,点击一个全部都高亮"

        最近在做一个Listview里嵌套多个Edittext的页面,刚开始还没什么问题.界面如下:

一个小问题引发的

        然后还按照需求,上传的时候判断如果输入框为空的话,就改变输入框的背景颜色来提示.这时候就发现这个EditText出现点其中一个,当前画面中所有Edittext都会高亮了.就算怎么修改他们clearFocus也不行.让我非常抓狂,上网到处都查不到相关资料.找了两天,也自己写了个小demo,正常的listview里面有多个Edittext都是正常的.我就把怀疑方向,放到我的业务需求代码那了.

        把所有业务代码屏蔽之后,就正常了.然后一步一步恢复,终于找到问题代码在于设置背景那里! 由于需要判断输入框为空之后,显示别的颜色,又要在有内容后,输入框背景恢复正常.但是设置其他颜色好办,如何恢复默认的背景是个问题,无论是设置透明颜色还是白色,都不是原来默认的.结果我就自作聪明的,在getView()那里保存了默认的background,是一个drawable.之后要恢复默认背景,就把这个drawable设回去.问题就在这个drawable那.后来分析这个drawable应该是xml,本身就设定好了focus和非focus的时候背景.所以点击了edittext之后,由于重用的关系,其他edittext还是把背景变成高亮,但clearFocus没能让这个背景改变.这点通过onTouch和focusChangeListener的log证实了我的想法.

        所以最后的解决方法,我就是找了SDK里面的edittext的背景png和高亮png,自己通过代码来控制他的背景.这样这个"高亮"的bug就解决了. 这里记录一下,方便自己以后碰到类似的问题,也好解决.

你可能感兴趣的:(Android,界面)