这是我打算做的: 我有一个活动,有20-25 EditText。当EditText的文本更改时,必须更改某些相应的TextView文本。即用户输入他每月的杂货支出,因此TextView显示他的杂货年度支出得到更新,每月和每年的总支出TextView也是如此。
我知道我可以使用TextWatcher.But,在这种情况下,我需要为每个EditText单独的TextWatcher。即使我编写一个自定义TextWatcher来保存EditText的Id并在switch-case块中执行适当的操作,但在这种情况下,我需要为每个EditText创建该类的新实例。这不是非常低效和耗费内存吗?
我希望有类似OnClickListener的东西,所以我只需要覆盖一些函数,它将完成所有任务,就像我的Activity中的所有按钮一样,我只需要覆盖onClick(View v)函数和完成。有没有办法实现这个目标?
答案 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,以便您知道是谁触发了文本输入。