关于ListView中多个EditText之间相互联动导致无限循环问题的解决方法

原创 2016年05月30日 17:14:58

事件描述:当给多个互相联动的EditText之间添加addTextChangedListener 监听时, 各个onTextChanged的调用将陷入无限的死循环当中。

解决思路:当给其中一个添加addTextChangedListener时,移除其他EditText的该事件, 

解决方法:先自定义EditText 为其添加clearTextChangedListeners()方法,可以移除TextWatcher监听,具体看代码

package com.Ieasy.Tool;

import java.util.ArrayList;

import android.content.Context;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText;

public class ExtendedEditText extends EditText {
  
  private ArrayList<TextWatcher> mListeners = null;

  public ExtendedEditText(Context ctx)
  {
      super(ctx);
  }

  public ExtendedEditText(Context ctx, AttributeSet attrs)
  {
      super(ctx, attrs);
  }

  public ExtendedEditText(Context ctx, AttributeSet attrs, int defStyle)
  {       
      super(ctx, attrs, defStyle);
  }

  @Override
  public void addTextChangedListener(TextWatcher watcher)
  {       
      if (mListeners == null) 
      {
          mListeners = new ArrayList<TextWatcher>();
      }
      mListeners.add(watcher);

      super.addTextChangedListener(watcher);
  }

  @Override
  public void removeTextChangedListener(TextWatcher watcher)
  {       
      if (mListeners != null) 
      {
          int i = mListeners.indexOf(watcher);
          if (i >= 0) 
          {
              mListeners.remove(i);
          }
      }

      super.removeTextChangedListener(watcher);
  }

  public void clearTextChangedListeners()
  {
      if(mListeners != null)
      {
          for(TextWatcher watcher : mListeners)
          {
              super.removeTextChangedListener(watcher);
          }

          mListeners.clear();
          mListeners = null;
      }
  }

}

参考链接:http://www.cnblogs.com/LIANQQ/p/3953617.html


之后我们就可以在ListView的Adapter的getView()方法中 对EditText进行监听,简易代码:

ExtendedEditText et = (ExtendedEditText)findViewById(R.id.et);

et.setOnFocusChangeListener(new android.view.View.
		        		OnFocusChangeListener() {
		        	@Override
		        	public void onFocusChange(View v, boolean hasFocus) {
		        		if(et.hasFocus())//获得焦点时给et添加文字改变监听
						{
		        			et.addTextChangedListener(new TextWatcher() {
								
								@Override
								public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
									// TODO Auto-generated method stub
									
									//do something
								}
								
								@Override
								public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
										int arg3) {
									// TODO Auto-generated method stub
									
								}
								
								@Override
								public void afterTextChanged(Editable arg0) {
									// TODO Auto-generated method stub
									
								}
							});
		        			
		        			
						}else{
							et.clearTextChangedListeners();//失去焦点时移除
						}
		        	});



Android 解决ListView里面多套布局多个EditText数据混乱问题

效果图: 参考:https://github.com/Aspsine/EditTextInListView 非常感谢 如果只是ListView里面只包含一套布局的话,可以参考...
  • fan7983377
  • fan7983377
  • 2017年01月13日 09:39
  • 1880

Android 实现多个EditText互相监听遇到的问题及解决方法

上周在实现一个功能的时候遇到了很多问题,然后折腾了好久才解决,以防今后又遇上同样的问题特在此记录下。 我实现的功能要求是一个界面上有四个EditText控件,其中任意一个内容变化,其他三个都要根据算...
  • u011249920
  • u011249920
  • 2016年02月21日 10:20
  • 1682

ListView中嵌入一个或多个EditText导致数据混乱解决方法

[vio.wang 崇尚开源 尊重原创] 转载请声明出处.     关于ListView嵌入一个或多个EditText导致数据混乱,一直是个一个老生常谈的问题.在开发过程中常遇见,在各个网站上都没有...
  • violetIC
  • violetIC
  • 2015年01月04日 15:17
  • 1870

ListView中的item存在EditText时,焦点问题及输入内容保存解决方法

ListView中的item存在EditText时,焦点问题及输入内容保存解决方法
  • EdgarNg
  • EdgarNg
  • 2016年01月13日 22:05
  • 2113

Android完美解决listview中多个edittext显示混乱问题

  • 2016年05月27日 16:25
  • 13.48MB
  • 下载

Android 解决ListView里面多套布局多个EditText数据混乱问题,附demo

  • 2017年01月13日 09:42
  • 1.02MB
  • 下载

Ubuntu14.04登录界面无限死循环的解决方法

我去网上找了好多方法,但是一试都不符合,又不敢删除什么,还得重装系统。 方法一: 1、ctrl + alt + F1进入命令终端(注意命令终端先输入你的用户名,再输入密码,不要傻傻的在...
  • snnily
  • snnily
  • 2017年12月19日 15:00
  • 78

Wordpress中wp-admim管理后台(404)无法进入,无限循环跳出解决方法

两天没登博客,今天突然无法进入管理员界面了,通常都是在网站后缀加上/wp-admin进去,今天竟然出现了进不去的情况,具体网页上面显示:oldpan.me/login__trashed?redirec...
  • IAMoldpan
  • IAMoldpan
  • 2017年12月23日 22:03
  • 89

完美解决recyclerview item上面包含多个edittext导致数据错乱,和滑动卡顿问题

  • 2017年12月28日 14:54
  • 17.72MB
  • 下载

获取Listview中EditText的值简单的解决方法

 http://www.webplusandroid.com/creating-listview-with-edittext-and-textwatcher-in-android/
  • java2009cgh
  • java2009cgh
  • 2014年11月03日 17:31
  • 9785
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于ListView中多个EditText之间相互联动导致无限循环问题的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)