private TextWatcher billEditTextWatcher = new TextWatcher()
{
// called when the user enters a number
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count)
{
// convert billEditText's text to a double
try
{
currentBillTotal = Double.parseDouble(s.toString());
} // end try
catch (NumberFormatException e)
{
currentBillTotal = 0.0; // default if an exception occurs
} // end catch
// update the standard and custom tip EditTexts
updateStandard(); // update the 10, 15 and 20% EditTexts
updateCustom(); // update the custom tip EditTexts
} // end method onTextChanged
@Override
public void afterTextChanged(Editable s)
{
} // end method afterTextChanged
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
} // end method beforeTextChanged
}; // end billEditTextWatcher
这是来自专业人士编写的小费计算器应用程序的代码段。谁能解释一下这是如何工作的?
通常我只需编写以下内容即可创建新对象。
TextWatcher billEditTextWatcher = new TextWatcher();
我理解私人所做的事。但是如何创建新对象的方法呢?它基本上是按照它说的做的吗?覆盖TextWatcher类中的原始方法?
我希望这个问题有道理,因为我很安静。
提前致谢!
答案 0 :(得分:3)
这是Java中匿名类的示例。您没有任何TextWatcher
java文件,并在初始化时声明了该类的内容。
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
答案 1 :(得分:1)
正如名称所示,TextWatcher将感知EditText
就像你在可编辑区域写东西一样。
它有以下回调(观察状态。)
beforeTextChanged();
afterTextChanged();
onTextChanged();
所有回调方法都包含由事件生成器传递的相关数据。按键是按键,键等的Unicode(ASCII)。
基本上, TextWatcher 用于在向其中输入数据时监视 EditText 或MultiLine EditText 。我们可以执行操作并密切关注输入的字符数或 EditText 中输入的字符数。
技术说明:
TextWatcher
,则需要使用EditText
对象取消TextWather
。{/ li>
醇>
e.g。
EditText editTextPassword; // Some EditText object.
TextWatcher billEditTextWatcher = new TextWatcher(); // TextWather object creation
editTextPassword.addTextChangedListener(billEditTextWatcher ); // EditText registation with Textwather object.
默认情况下,TextWather的所有回调都是空的,这就是为什么你需要根据你的要求给出你所有回调的定义。
private TextWatcher billEditTextWatcher = new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// you code is here while onTextChanged.
}
@Override
public void afterTextChanged(Editable s)
{
you code is here while afterTextChanged.
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
// you code is here while beforeTextChanged.
}
};