Android EditText更改其他EditText值

时间:2013-06-24 18:22:31

标签: java android

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

  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声明为类级变量。谢谢各位的帮助。你的回答将帮助我解决将来的错误。

3 个答案:

答案 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)吗?