监视多个EditText以在Android中更改文本

监视多个EditText以在Android中更改文本,android,android-edittext,textwatcher,Android,Android Edittext,Textwatcher,这就是我打算做的: 我有一个活动,有20-25个文本。当EditText的文本更改时,必须更改一些相应的TextView文本。i、 e.用户输入其每月食品杂货支出,因此显示其每年食品杂货支出的文本视图得到更新,月度和年度支出总额文本视图也得到更新 我知道我可以用TextWatcher来做。但是在这种情况下,我需要为每个EditText单独设置一个TextWatcher。即使我编写了一个自定义TextWatcher,它保存EditText的Id,并在switch case块中执行适当的操作,但在这

这就是我打算做的: 我有一个活动,有20-25个文本。当EditText的文本更改时,必须更改一些相应的TextView文本。i、 e.用户输入其每月食品杂货支出,因此显示其每年食品杂货支出的文本视图得到更新,月度和年度支出总额文本视图也得到更新

我知道我可以用TextWatcher来做。但是在这种情况下,我需要为每个EditText单独设置一个TextWatcher。即使我编写了一个自定义TextWatcher,它保存EditText的Id,并在switch case块中执行适当的操作,但在这种情况下,我需要为每个EditText创建该类的新实例。这不是非常低效和消耗内存吗


我希望有像onClick Listener这样的东西,这样我就只需要覆盖一些函数,它就可以完成所有任务,就像我的活动中的所有按钮一样,我只需要覆盖onClick(View v)函数和它的done。有办法做到这一点吗?

您不能避免使用
TextWatcher
来“查看”您的
EditText
上的输入事件。不久前,我回答说,只要稍加修改,你就可以用它来让事情变得简单。根据我的回答,在该类中,您可能需要修改
onInputChange()
方法,以同时返回
EditText
的id,这样您就知道是谁触发了文本输入。

类似的情况如何:

yourEditText1.setOnFocusChangeListener(yourFocusChangeListener);
yourEditText2.setOnFocusChangeListener(yourFocusChangeListener);

View.OnFocusChangeListener yourFocusChageListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // Update your textview depending on which edittext lost focus
        }
    }
});

与TextWatcher(IMO)相比,这样做的好处是您知道用户已经完成了,因为他们已经离开了EditText。唯一的问题是他们需要导航到别处才能启动它(不确定这是否会成为你的一个障碍)。

这显然可以做到,但我希望听众像TextWatcher一样立即启动。谢谢你的评论。你能解释一下我如何获得触发事件的
EditText
的id吗?@Mehedi获得该id的唯一方法是将其传递给
TextWatcher
实现,就像你在问题中已经提到的那样。我已经编辑了我以前的示例以合并id,您可以在这里找到它。不要担心内存占用或性能问题,那些
TextWatcher
实例不会成为问题。谢谢您的评论。我想我没有别的选择了。我会试试看,让你知道进展如何。