2012-02-27 2 views
3

텍스트 2 개와 버튼 1 개가 있습니다. 사용자가 모든 편집 텍스트를 채울 때까지이 버튼을 비활성화하려면 어떻게합니까? 이 코드를 사용했지만이 코드를 실행하면 2 편집 텍스트를 채울 때도 항상 단추를 사용할 수 없으며 onTextChanged 및 beforeTextChanged가 무엇 인지도 모릅니다!편집 텍스트가 비어 있거나 비어 있지 않을 때 버튼을 사용/사용 중지하는 방법

제발 도와 줘서 고맙습니다.

public class TestActivity extends Activity { 
/** Called when the activity is first created. */ 
EditText edit1; 
EditText edit2; 
EditText edit3; 
Button button; 
String test1; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // Your initialization code... 
    // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      edit1= (EditText) findViewById(R.id.edit1); 
      edit2= (EditText) findViewById(R.id.edit2); 

      button=(Button) findViewById(R.id.button); 




    TextWatcher watcher = new LocalTextWatcher(); 
    edit1.addTextChangedListener(watcher); 
    edit2.addTextChangedListener(watcher); 

    updateButtonState(); 
} 

void updateButtonState() { 
    boolean enabled; 
    if(enabled = checkEditText(edit1) 
     && checkEditText(edit2)){ 
     button.setEnabled(enabled);} 
     } 
} 

private boolean checkEditText(EditText edit) { 
    return Integer.getInteger(edit1.getText().toString()) != null; 
} 

private class LocalTextWatcher implements TextWatcher { 
    public void afterTextChanged(Editable s) { 
     updateButtonState(); 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 
} 




}}} 
+0

, 그것의 길이 경우 테스트 쉬울 텍스트가 0보다 큽니다. – VirtualTroll

답변

2

Monerah는 대한 checkEditText 방법을 변경 :

private boolean checkEditText(EditText edit) { 
    return edit.getText().length() == 0; 
} 

하고 updateButtonState()를 위해 : 그것은 바로 작동 할 것

void updateButtonState() { 
    if(checkEditText(edit1) && checkEditText(edit2)) button.setEnabled(false); 
    else button.setEnabled(true); 
} 

합니다.

추가 조언으로 isEditTextEmpty에 대한 checkEditText의 이름 또는 그 기능에 대한 더 많은 대표적인 것을 변경했습니다. 그것은 onTextChanged 및 방법은 다음에서 살펴 않습니다 beforeTextChanged 무엇인지에 대한 질문에 대해서는

:)이 if 문은 훨씬 더 읽기 쉽게 만들 것입니다 :

beforeTextChanged (CharSequence를 S, INT 시작, INT 수, int after). 이것은 문자가 새로운 텍스트로 대체 될 예정임을 의미합니다. 텍스트는 편집 할 수 없습니다. 사용 : 변경하려는 오래된 텍스트를 볼 필요가있을 때.

onTextChanged (CharSequence s, int start, int before, int count). 변경되었습니다. 일부 문자가 방금 대체되었습니다. 텍스트는 편집 할 수 없습니다. 사용 : 새로운 텍스트 인 문자를 확인해야 할 때 사용합니다.

afterTextChanged (편집 가능). 위와 동일하지만 텍스트는 편집 할 수 있습니다. 사용 : 새 텍스트를보고 편집해야하는 경우.

첫 번째 두 가지 방법은 afterTextChanged를 사용하여 수행하려는 작업에 유용하지 않습니다. 도움이 되길 바랍니다.

0

실제로, 이러한 방법 중 하나는 텍스트 필드에있는 내용에 따라 버튼을 활성화/비활성화 수행하는 데 사용될 수있는 다음 checkEditText 방법에서는

@Override 
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { 
    if (charSequence.length() == 0 && after > 0) { 
     // enable button 
    } else if (charSequence.length() == count && after == 0) { 
     // disable button 
    } 
} 

// OR 

@Override 
public void onTextChanged(CharSequence charSequence, int start, int before, int count) { 
    if (charSequence.length() == count && before == 0) { 
     // enable button 
    } else if (charSequence.length() == 0 && before > 0) 
     // disable button 
    } 
} 

// OR 

@Override 
public void afterTextChanged(Editable editable) { 
    if (editable.length() > 0 && !button.isEnabled()) { 
     // enable button 
    } else if (editable.length() == 0 && btnEnroll.isEnabled()) { 
     // disable button 
    } 
} 
관련 문제