Listview中的嵌套EditView等抢焦点view

if(convertView == nul
   holder = new ViewHolder();
   convertView = laoutinflater.inflate(R.layout.fmsearch_layout_app_content,null);
   holder.appView = (TextView) convertView.findViewById(R.id.txt_app);
   holder.image  = (ImageView) convertView.findViewById(R.id.image);
   convertView.setTag(holder);
}else{
   holder = (ViewHolder) convertView.getTag();
}

 

上面其实是我为了尝试listview使用缓存

 

因为是焦点组件,需要记录一些Focus焦点位置,而viewHolder为缓存着复用组件所以每次每次获取到Viewholder

都需要在getview里比较靠前的位置先把里面的position参数设置正确

而focus状态和position是绑定的,所以在滑到指定有focus的position的时候需要手动将焦点view即edittext调用requestfocus(),同时其他的clear的有focus的view,避免焦点错乱。

但是现实是焦点并没有clearfocus之后editetext并不能准确的获取到focus,导致输入的时候出现无法输入的情况

最终解决办法是不适用缓存,每次getview的时候都去初始化一个新的view,发现这个问题确实不存在了。

所以这个问题的解决方案是下下策,后期如果能解决视图缓存的问题,才算完美解决。

if(convertView == null){
        holder = ViewHolder()
        /...省略视图findview/
}else{
        holder = (ViewHolder) convertView.getTag()
}

把这两行注释之后功能就可以正常使用了。 等于就是去掉视图缓存。

这里说的只是其中一种其他的类似 checkBox解决方案是一致的。

转载于:https://my.oschina.net/mastere/blog/551207

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值