listview中的每项都有一个edittext,而且现在需要实时监听该edittext的输入,在listview的外部进行改变(例如用户修改单价,外部的总价需要变化)

添加监听器的代码:

public View getView(final int position, View arg1, ViewGroup arg2) {if (arg1 == null) {arg1 = inflater.inflate(R.layout.main_layout, null);final ViewHolder holder = new ViewHolder();holder.position = position;holder.et_price.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}@Overridepublic void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}@Overridepublic void afterTextChanged(Editable arg0) {//do something use holder.position}});arg1.setTag(holder);}final ViewHolder holder = (ViewHolder) arg1.getTag();holder.position = position;return arg1;}
这样就能够保证,每个edittext的textwacher不会被添加多次,而且listview滑动的时候也能够正确的工作

还有需要注意的是在textwacher里面需要使用holder.position来表示当前edittext的位置,并且需要更新该holder的positioin


这时就要提到一个问题是,listview和gridview的getview 可能会调用多次,原因是如果listview的高度是wrap_content的话,listview就会去调用计算子view的高度,最后来计算listview的整体高度,所以造成会调用多次:

详细介绍

其实按照正常的角度来说,调用多次getview方法并没有什么错误,因为前面的getview方法返回的view并不会添加进入listview中,仅仅是用作计算高度,但是现在非常奇怪的现象是添加进listview中那个view里面的edittext的textwacher会回调很多次,而且回调内容很奇怪,不明原因,所以解决办法是修改textwacher里面的回调方法中加入

if (!holder.et_price.getRootView().getClass().toString().contains("DecorView")|| holder.et_price.getParent().getParent().getParent().getParent().getParent() == null)return;if (holder.et_price.getParent().getParent() == null) return;

两个函数中的其中一个来标识该edittext的父view是否是被添加进listview中的那个view,暂时想到这个解决方法,具体原因也是不明白,有遇到的告诉小弟


还有一个是,listview嵌套listview,重写内层listview的onmeasure方法,结果是里面的listview会一次性调用所有项的getview方法,不会动态随着屏幕的移动而复用convertview,所以这时内层listview的edittext不会出现edittext输入了内容,拉倒屏幕外,再拉回这项之后,该edittext上次输入的内容没有保存的情况。但是如果单独一个listview+edittext就会出现这种情况,最好的办法就是定义一个map去保存每个edittext的输入值


更多相关文章

  1. android fastjson使用方法 fastjson教程
  2. Android(安卓)UI 使用HTML布局(直接打开服务器网页)
  3. Android在代码中打开Wifi、移动网络和GPS
  4. [Android(安卓)界面] setContentView和inflate区别
  5. 从Android到IOS,IOS应用生命周期函数
  6. android应用集
  7. Android中CMake的使用之四调用第三方库的实战
  8. Activity作为dialog展示,如何添加自定义圆角背景
  9. Android(安卓)ExpandableListView折叠

随机推荐

  1. Facebook 客户端优化实践后,App 启动提速6
  2. Android企业级程序完全退出的解决方案
  3. 【Android】第三方库使用的问题集
  4. android Shape使用(转)
  5. Android(安卓)数据存储之SQLite
  6. 模拟器中加载和使用SDCard卡
  7. ADB server didn't ACK'的解决办法
  8. Android(安卓)菜商品列表展示
  9. [原创] Android(安卓)NDK 安装全记录
  10. color用法大全--Android布局背景颜色设置