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。
效果图:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:TextWatcher如何找到调用它的EditText-创新互联
网页链接:http://pwwzsj.com/article/ijodi.html