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解决方案是一致的。