2014-12-26 31 views
0

我試圖獲得EditText(numberRoom)的字符數。當用戶插入8個字符時,按鈕應該從禁用狀態和顏色0xBBFFFFFF切換到啓用狀態並且顏色0xFFFFFFFF。 我試過很少的方法,我認爲我發現的最好的一個是下面的一個。但是,即使輸入爲空,按鈕的狀態爲Enabled,顏色爲0xFFFFFFFF。那裏有什麼問題?Android:EditText的實時字符數

public class Join_room_screen extends Activity { 

    EditText numberRoom; 
    Button goToRoom; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.joinroom); 

     numberRoom = (EditText) findViewById(R.id.roomNumber); 
     goToRoom = (Button) findViewById(R.id.goToRoom); 

     TextWatcher watcher = new LocalTextWatcher(); 
     goToRoom.addTextChangedListener(watcher); 
     updateButtonState(); 
    } 

    void updateButtonState() { 
     boolean enabled = checkEditText(numberRoom); 
     goToRoom.setBackgroundColor(0xFFFFFFFF); 
     goToRoom.setEnabled(enabled); 
    } 

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

    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

) 添加此.. goToRoom.setEnabled(假); – justDroid

+0

Crosspost:http://codereview.stackexchange.com/q/74930/29371 – Heslacher

回答

0

在此功能啓用變量是從未使用過這樣的背景顏色和啓用狀態始終設置。

void updateButtonState() { 
    boolean enabled = checkEditText(numberRoom); 
    goToRoom.setBackgroundColor(0xFFFFFFFF); 
    goToRoom.setEnabled(enabled); 
} 

我會的東西取代像

void updateButtonState() { 
    boolean enabled = checkEditText(numberRoom); 
    if (enabled) { 
     goToRoom.setBackgroundColor(0xFFFFFFFF); 
     goToRoom.setEnabled(enabled); 
    } else { 
     //change them back to disabled state 
    } 
} 
+0

我已更改爲此 'void updateButtonState(){ boolean enabled = checkEditText(numberRoom); (啓用){ goToRoom.setBackgroundColor(0xFFFFFFFF); goToRoom.setEnabled(enabled); } else { goToRoom.setBackgroundColor(0xBBFFFFFF); goToRoom.setEnabled(false); } }' 和按鈕被禁用,但是當我輸入8個字符時,它仍然被禁用。 – Abdizriel

+0

所以這是問題中概述的問題的原因。如果你想要一個通用的代碼檢查而不是一個特定問題的答案,那麼你應該發佈http://codereview.stackexchange.com/ –

0

您在updateButtonState有一個問題(),它總是將一種顏色的按鈕。我明白了,你已經解決了這個問題。 另一個問題是,您將TextChangeListener設置爲不是EditText,而是爲了某個Button。 應該監視EditText。

numberRoom.addTextChangedListener(watcher); 

代替

goToRoom.addTextChangedListener(watcher); 
中的onCreate(
+0

但是numberRoom是EditText,而不是goToRoom – Abdizriel

+0

正確。這是觀察文本更改的正確對象。看,你的代碼試圖看你的按鈕的文本更改 –