1

当我编辑一个文本字段时,我希望更改另一个文本字段。

  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 - 我是个白痴。EditText editTextAmount当我应该 final EditText editTextAmount在 getView() 方法中声明它时,我将其声明 为类级别变量。谢谢各位的帮助。您的回答将帮助我解决将来的错误。

4

3 回答 3

2

我假设您要做的是在其中输入一个数字editTextCount,该数字将乘以value并将最终计算写入editTextAmount. 如果是这种情况,为什么不使用,

editTextAmount.setText(value * Integer.parseInt(editTextCount.getText()));

Editable使用一个对象来创建一个无限递归情况真的很容易,在这种情况下你afterTextChanged无限地调用,afterTextChanged如果它正在监听什么,或者它的Editable对象被改变,就会被调用。因此,如果您更改其中的Editable对象,afterTextChanged它将递归地调用其自身。

尝试打印这些值以识别任何问题可能是值得的:

System.out.println("Value: " + value);
System.out.println("Count: " + Integer.parseInt(editTextCount.getText()));
System.out.println("Amount: " + (value * Integer.parseInt(editTextCount.getText())));
于 2013-06-24T19:12:40.770 回答
2

我认为您需要在onTextChanged()而不是afterTextChanged(). 从文档

调用此方法是为了通知您,在 s 内,从 start 开始的 count 个字符刚刚替换了之前有 length 的旧文本。


附带说明一下,您应该在传递值之前检查parseInt的输入。如果数字无效,它会抛出异常

于 2013-06-24T18:27:34.767 回答
1

afterTextChanged() 应该没问题。您确定某些值未正确初始化(例如 value = 0)吗?

于 2013-06-24T18:41:02.407 回答