重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
和我在南方一起工作的朋友说,“南北方的差异其实蛮大的。”我家在北方,也在南方工作,不过我倒是觉得差异不怎么大,因为我在北方的时候,就没有女朋友,而来到了南方,同样没有女朋友。
创新互联主要企业基础官网建设,电商平台建设,移动手机平台,重庆小程序开发等一系列专为中小企业按需定制网站产品体系;应对中小企业在互联网运营的各种问题,为中小企业在互联网的运营中保驾护航。
开发时遇到一个问题,如同标题,当一个类继承了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。
效果图: