0

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

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

我希望有像 OnClickListener 这样的东西,这样我只需要覆盖一些函数,它就会完成所有任务,比如我的 Activity 中的所有按钮,我只需要覆盖 onClick(View v) 函数并完成它。有没有办法做到这一点?

4

2 回答 2

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。唯一的问题是他们需要离开才能触发它(不确定这是否对你来说是一个阻碍)。

于 2012-11-24T17:17:17.713 回答
0

您无法避免使用 aTextWatcher来“查看”您的EditText. 前段时间我回答了一个类似的问题,稍加修改你可能会用它来让事情变得简单。在我回答的那个类中,您可能需要修改onInputChange()方法以返回 idEditText以便您知道谁触发了文本输入。

于 2012-11-24T17:03:36.267 回答