listview的item中嵌套多个EditText时的问题

项目需求:列表展示数据,同时可以修改,保存编辑过的数据(编辑某个数据时背景加深)。

问题1:当访问数据库,下载数据后使用adapter展示后,由于item中包含EditText,点击某一个EditText,该EditText获得焦点,光标显示,此时滚动listview会发现光标也会跑到别的item的EditText控件里面。

解决方案:在listview的onScrollChangedListener里面设置listview滚动时,listview.requestfocus().

问题2:编辑某EditText要求背景加深

解决方案:给item的每个EditText设置onFocusChangedListener,一旦获取焦点,就将背景加深,失去焦点,还原背景

问题3:滚动listview时会发现某些item中的EditText并没有获得焦点但是的背景加深

解决方案:这是由于convertView复用导致的,在getview方法中if(convertView!=null){}else{//在这里恢复未编辑状态}。

问题4:问题1,2解决后发现编辑某EditText时如果滚动listview后,正在编辑的EditText再次回到可视区域时,怎么背景加深

解决方案:(如有更好方法,不吝赐教)在EditText获取到焦点时使用listview.setTag(int key,Object value);

listview.setTag(R.id.TAG,tag);

listview.setTag(R.id.POSITION,position);

最后在listview的onScrollChangedListener的onScrollChanged中判断position是否可视,如果可视,则通过tag和position获取到EditText,editText.setBackground(为什么不editText.requestFocus()??实践证明当使用editText.requestFocus后,listview滚动时光标乱跑的问题又出来了)。

问题5:问题4解决后,衍生出来的问题就是,listview滚动后,edittext再次回到可视界面,设置背景加深后,如果此时点击别的EditText,那么上一个edittext的背景还是加深状态

解决方案:在onFocusChangedListener方法中,先获取到该EditText(通过listview.getTag(key)),设置背景初始。

问题6:项目需求不同EditText需要使用不同的自定义键盘,每次键盘弹出后选中的EditText会失去焦点

解决方案:键盘弹出后布局发生变化,会重新执行getView方法,所以在getView方法中判断是否之前有选中EditText(通过listview.getTag(key),获取到之前的EditText),如有,则背景加深。

问题7:EditText编辑后,listview滚动后,原先编辑的数据不见了

解决方案:在EditText的OnFocusChangedListener中判断Edittext的内容有没有变化,如有变化则将adapter的list更新。

问题8:不同的item,不同的EditText编辑后,怎么保存

解决方案:新建一个List<Map<String,String>>通过键值对区分不同的EditText(这与数据库的设计还是有关系的)。

转载于:https://www.cnblogs.com/xiaoxiaoxiaoV/p/4721788.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值