android textwatcher 获取当前控件,TextWatcher如何找到调用它的EditText

作者分享了在Android开发中,如何在一个类继承TextWatcher时,通过内部类和EditText Id识别具体触发变化的控件,避免混淆。实例代码展示了如何为多个EditText设置监听,并根据输入判断是哪个EditText触发的空值检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

开发时遇到一个问题,如同标题,当一个类继承了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。

效果图:

fa2decf50864878a46bbc82732853626.png

eea57cebac31e799493f6a697d268060.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值