Listview 中的item 每个addTextChangedListener 都被触发了
来源:互联网 发布:淘宝客服兼职 靠谱吗 编辑:程序博客网 时间:2024/05/17 08:45
最近遇到一个问题,在Listview 中的item 放个editview ,然后监听editview 的文本变化,来设置数组中的数,addTextChangedListener, 发现每个item的监听都被触发了,导致我的数组中的每个数都是一样的。。然后notifyDataSetChanged 后,就把界面Listview中的每个item中的文本框中的内容都变成刚才文本改的一样的。。
经过苦苦查询,终于找到解决方法,在此特别记录下。
第一步:在自定义的adapter 中定义一个记录是否用原始记录还是文本监听改变记录的标识符。
private boolean ischange=true;
第二步:
将监听放在初始化viewholder 的那段代码里面,在监听事件中判断标识符,如果是true则不做任何操作,false的话再接着操作。
第三步:
将 在holder.product_ext.setText之前设置为标识符true,在holder.product_ext.setText之后设置为标识符false。
二,三步的代码如下:
@Override public View getView(final int position, View convertView, ViewGroup parent) { final OrderChanPin orderChanPin=mList.get(position); ViewHolder holder; if (convertView==null){ holder=new ViewHolder(); convertView= LayoutInflater.from(mContext).inflate(R.layout.commit_item,null); holder.product_name= (TextView) convertView.findViewById(R.id.product_name); holder.product_pic= (ImageView) convertView.findViewById(R.id.product_pic); holder.product_rating= (RatingBar) convertView.findViewById(R.id.product_rating); holder.product_ext= (EditText) convertView.findViewById(R.id.product_ext); holder.gridView =(GridView)convertView.findViewById(R.id.gridView); holder.lablegridView =(GridView)convertView.findViewById(R.id.gv_productlable);// 第二步 holder.product_ext.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (!ischange) { mList.get(position).setCommit(s + ""); } } }); holder.product_rating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { if (!ischange) { String str = String.valueOf(rating); str = str.substring(0, str.indexOf(".")); orderChanPin.setRigbar(str); mList.get(position).setRigbar(str); notifyDataSetChanged(); } } }); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } //第三步 ischange =true; holder.product_ext.setText(mList.get(position).getCommit()); if(!mList.get(position).getRigbar().isEmpty()){ holder.product_rating.setRating(Integer.parseInt(mList.get(position).getRigbar())); } ischange =false; return convertView; }
然后,这里代码中还有RatingBar 的这个组件,当根据setOnRatingBarChangeListener 这个监听来设置星级的时候,也会发生和文本监听变化类似的错误,会让整个Listview中的评星级都变成一样的等级。所以也需要和文本变化监听类似的处理方式。
如此处理后,即使复用viewholder 也不会发生改一个文本,所有的文本都变成一样的。
3 0
- Listview 中的item 每个addTextChangedListener 都被触发了
- Listview 中的item 每个addTextChangedListener 都被触发了
- ListView滑动触发addTextChangedListener事件
- ListView的每个Item都不同布局
- Android ListView滑动会触发addTextChangedListener
- ListView中的每个Item嵌套使用ToggleButton
- listview如何加载动画,实现每个item都有效果
- Android ListView滑动会触发addTextChangedListener,导致显示错乱
- ListView里如果有EditText,Edittext的值修改后,会触发其他的item里EditText的addTextChangedListener,导致数据重复
- Android下listview每个Item中包含有按钮,为什么在点击某一行按钮的时候,同时有多行button触发了响应事件?
- ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果
- Android中ListView的item实现点击任意位置都触发事件
- 一个ListView每个item都能跳转到不同的Activity,解决方案。
- ListView的onItemClick监听无效,被listview中的item自控件偷取了焦点
- listview 跟 addTextChangedListener冲突
- ListView中实现互斥按钮(每个Item中有两个button,永远只有一个item中的一个按钮被选中)
- Listview按键触发选择item改变文字
- android左右手势滑动时与listview中的item事件触发有冲突
- java从菜鸟到架构师的必看书籍
- 【面试笔试】数据库相关
- JS学习笔记
- Parcelable的使用,以及与Serializable的区别(最后有实例)
- mysql 存储过程
- Listview 中的item 每个addTextChangedListener 都被触发了
- php5.2 、5.3、5.4、5.5、5.6 各个版本升级不兼容点
- HttpClient
- MFC编程基础
- Oracle11g使用exp导出空表
- 常用的正则表达式总结
- Java的类加载步骤
- 奇数阶魔方
- java适配器模式