资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

TextWatcher如何找到调用它的EditText-创新互联

和我在南方一起工作的朋友说,“南北方的差异其实蛮大的。”我家在北方,也在南方工作,不过我倒是觉得差异不怎么大,因为我在北方的时候,就没有女朋友,而来到了南方,同样没有女朋友。

“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于网站设计、做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!

    开发时遇到一个问题,如同标题,当一个类继承了TextWatcher时,倘若这个类中有很多EditText控件,那么如何知道调用TextWatcher的是哪一个EditText控件呢?如果一个类继承的是OnClickListener,那可以通过View获取控件的Id值,从而分辨控件,做对应操作。可惜TextWatcher似乎没有类似的方法。我是这样解决的:

    布局文件:



    
    
    
    
    

    很简单,只是写了几个EditText控件。

    主类:

package com.example.edittexttest;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class EditTextTest extends Activity {

	EditText edit1, edit2, edit3, edit4, edit5;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_edit_text_test);

		edit1 = (EditText) findViewById(R.id.edit1);
		edit1.addTextChangedListener(new ClassOfTextWatcher(edit1));
		setCursorToEnd(edit1);
		edit2 = (EditText) findViewById(R.id.edit2);
		edit2.addTextChangedListener(new ClassOfTextWatcher(edit2));
		setCursorToEnd(edit2);
		edit3 = (EditText) findViewById(R.id.edit3);
		edit3.addTextChangedListener(new ClassOfTextWatcher(edit3));
		setCursorToEnd(edit3);
		edit4 = (EditText) findViewById(R.id.edit4);
		edit4.addTextChangedListener(new ClassOfTextWatcher(edit4));
		setCursorToEnd(edit4);
		edit5 = (EditText) findViewById(R.id.edit5);
		edit5.addTextChangedListener(new ClassOfTextWatcher(edit5));
		setCursorToEnd(edit5);

	}

	private class ClassOfTextWatcher implements TextWatcher {

		private TextView view;

		public ClassOfTextWatcher(View view) {
			
			if (view instanceof TextView)
				this.view = (TextView) view;
			else
				throw new ClassCastException(
						"view must be an instance Of TextView");
		}

		@Override
		public void afterTextChanged(Editable s) {
			
			if (s.length() <= 0) {
				switch (view.getId()) {

				case R.id.edit1:
					Toast.makeText(EditTextTest.this, "第一个编辑框为空!",
							Toast.LENGTH_LONG).show();
					break;
				case R.id.edit2:
					Toast.makeText(EditTextTest.this, "第二个编辑框为空!",
							Toast.LENGTH_LONG).show();
					break;
				case R.id.edit3:
					Toast.makeText(EditTextTest.this, "第三个编辑框为空!",
							Toast.LENGTH_LONG).show();
					break;
				case R.id.edit4:
					Toast.makeText(EditTextTest.this, "第四个编辑框为空!",
							Toast.LENGTH_LONG).show();
					break;
				case R.id.edit5:
					Toast.makeText(EditTextTest.this, "第五个编辑框为空!",
							Toast.LENGTH_LONG).show();
					break;
				default:
					break;
				}
			}
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {

		}

		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count) {

		}

	}
	
	//将编辑框的光标移动到末尾
	public void setCursorToEnd(EditText text){
		String content = text.getText().toString();
		text.setSelection(content.length());
	}
}

    写了一个叫“ClassOfTextWatcher”的内部类,它实现了TextWatcher接口,这个内部类的构造方法中传入View控件来获取控件的Id。

    效果图:

TextWatcher如何找到调用它的EditText

TextWatcher如何找到调用它的EditText

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:TextWatcher如何找到调用它的EditText-创新互联
网页URL:http://cdkjz.cn/article/ijodi.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220