在Android中观看多个EditText以进行文本更改

时间:2012-11-24 16:17:52

标签: android android-edittext textwatcher

这是我打算做的: 我有一个活动,有20-25 EditText。当EditText的文本更改时,必须更改某些相应的TextView文本。即用户输入他每月的杂货支出,因此TextView显示他的杂货年度支出得到更新,每月和每年的总支出TextView也是如此。

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

我希望有类似OnClickListener的东西,所以我只需要覆盖一些函数,它将完成所有任务,就像我的Activity中的所有按钮一样,我只需要覆盖onClick(View v)函数和完成。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

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。唯一的问题是他们需要离开它才能开火(不确定这对你是不是一个showstopper)。

答案 1 :(得分:0)

您无法避免使用TextWatcher“查看”EditText上的输入事件。前段时间我回答a similar question,经过一些小修改,你可以用它来简化事情。在我的答案中,您可能需要修改onInputChange()方法以返回EditText的ID,以便您知道是谁触发了文本输入。