当我编辑一个文本字段时,我想要更改另一个文本字段。
editTextCount.addTextChangedListener( new TextWatcher( ) {
@Override
public void afterTextChanged( Editable arg0 ) {
if ( arg0.length( ) == 0 ) {
return;
}
editTextAmount.setText( value
* Integer.parseInt( arg0.toString( ) )+"" );
}
@Override
public void beforeTextChanged( CharSequence arg0, int arg1, int arg2,
int arg3 ) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged( CharSequence arg0, int arg1, int arg2,
int arg3 ) {
// TODO Auto-generated method stub
}
} );
当我编辑editTextCount时,editTextAmount应该更改,但没有任何反应。
编辑 - 另外,我忘了提到这是在自定义ArrayAdapter中。这可能是问题吗?
Edit2 - 我是个白痴。当我应该在getView()方法中声明它EditText editTextAmount
时,我将final EditText editTextAmount
声明为类级变量。谢谢各位的帮助。你的回答将帮助我解决将来的错误。
答案 0 :(得分:2)
我认为您需要在onTextChanged()
而不是afterTextChanged()
中实施您的代码。来自docs:
调用此方法是为了在s内通知您计数 从开头开始的字符刚刚替换了旧文本 之前的长度。
在旁注中,您应该在传递值之前检查parseInt的输入。如果数字无效
,它会抛出异常答案 1 :(得分:2)
我假设你要做的是在editTextCount
中键入一个数字,然后将该数字乘以value
,并将最终计算写入editTextAmount
。如果是这种情况,为什么不使用,
editTextAmount.setText(value * Integer.parseInt(editTextCount.getText()));
使用Editable
对象来创建一个无限递归的情况非常容易,你无限地调用afterTextChanged
,如果正在监听它,afterTextChanged
被调用,或者它是{ {1}}对象被更改。因此,如果您更改Editable
中的Editable
对象,它将以递归方式调用其自身。
尝试打印这些值以识别任何问题可能是值得的:
afterTextChanged
答案 2 :(得分:1)
afterTextChanged()应该没问题。您确定,某些值未正确初始化(例如,值= 0)吗?