2013-06-24 4 views
1

하나의 텍스트 필드를 편집 할 때 다른 텍스트 필드가 변경되기를 원합니다.Android EditText 다른 EditText 값을 변경하십시오.

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에 있음을 잊어 버렸습니다. 이것이 문제가 될 수 있습니까?

편집 2 - 나는 바보입니다. 나는 그것을 getView() 메소드 안에 final EditText editTextAmount으로 선언해야했을 때 클래스 레벨 변수로 EditText editTextAmount을 선언했다. 모두에게 도움을 주셔서 감사합니다. 귀하의 답변은 앞으로 오류가 발생할 때 도움이 될 것입니다.

+0

당신이 예외 또는 오류 메시지를 받고 있습니까 :

이 문제를 식별하기 위해 이러한 값을 인쇄 시도 할 가치가있을 수있다? ' * Integer.parseInt (arg0.toString()')가 예상 값인지 확인 했습니까? – codeMagic

+0

Sytem.out.print를 값에 호출하면 올바른 값을 얻습니다. * Integer.parseInt (arg0. toString()) 및 on editTextAmount.getText() – labatyo

답변

2

afterTextChanged() 대신 onTextChanged()에 코드를 구현해야한다고 생각합니다. docs에서 :

이 방법은 초 이내에, 시작에서 시작하는 카운트 문자가 직전 길이를 가지고 오래된 텍스트를 교체 한 사실을 통지하기 위해 호출됩니다. 보조 노트에


, 당신은 가치를 전달하기 전에 parseInt의 입력을 확인해야합니다. 유효하지 않은 숫자의 경우에 예외를 던졌습니다

1

afterTextChanged()가 정상이어야합니다. 일부 값이 올바르게 초기화되지 않았습니까 (예 : 값 = 0).

+0

값이 제대로 초기화되었습니다 .System.out.println (editTextAmount.getText())를 호출해도 올바른 값이 인쇄됩니다. 화면 – labatyo

+1

Editable을 사용하지 않고 직접 EditText에서 내용을 가져 와서 값을 올바르게 설정하면 확인할 수 있습니다. – th0m4d

2

당신이하려고하는 것은 editTextCount에 숫자를 입력하고 해당 숫자에 value을 곱하여 editTextAmount으로 최종 계산을 작성한다고 가정합니다. 이 경우, 이유가있는 경우 afterTextChanged이가 수신 대기하는 경우 무엇을 호출됩니다, 당신은 무한 afterTextChanged를 호출 inifinite 재귀 상황을 작성하기 위해 Editable 객체를 사용하기 정말 쉽습니다, 또는,

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

를 사용하지 해당 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()))); 
+0

다음은 모든 값을 인쇄 할 때의 값입니다. 값 : 0.01 editTextCount : 50.0 금액 : 0.5 editTextAmount : 0. 5.그것은 editTextAmount의 값이 변경되었지만 화면에 나타나지 않는다고 말합니다. – labatyo

+0

이'EditText' 객체가 XML로 정의 되었습니까? 그렇다면'editTextAmount'에 대한 Java'View'가 XML 객체에 올바르게 연결되어 있습니까? 'editTextCout'에서 값을 얻을 수 있기 때문에 필자는 XML로 정의 되었다면 제대로 연결되어 있다고 가정 할 것입니다. –