我有一些代碼,利用材質對話框庫;我有一個與四個EditText字段(電子郵件,名稱,用戶名,密碼)的對話框。我想它,以便對話框的註冊按鈕是無效的,除非各個領域中都有至少一個字符。TextWatcher多的EditText領域
我,四處搜尋,找到了一種方法來做到這一點;不幸的是,它似乎沒有工作。例如,如果我拉起對話框並在任何單個字段中輸入任何內容,則該按鈕將變爲啓用狀態。但是,如果我編輯單個字段,然後編輯另一個字段,但刪除其中一個字段內的文本 - 該按鈕將被禁用;如果我要填寫所有字段,則會發生同樣的情況,然後刪除單個字段中的文本。
我曾想過利用其他的建議(這將涉及寫我自己的私有內部類) - 但我並不認爲這事考慮我想達到同樣的事情(至少,據我所知, )。
首先你需要textwatcher添加到特定的EditText,你沒有:如
//registerDialog is a MaterialDialog object
final View registerAction = registerDialog.getActionButton(DialogAction.POSITIVE);
final EditText registerNameInput;
final EditText registerEmailInput;
final EditText registerUsernameInput;
final EditText registerPasswordInput;
if (registerDialog.getCustomView() != null) {
registerNameInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_name);
registerEmailInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_email);
registerUsernameInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_username);
registerPasswordInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_password);
/*
* TextWatcher lets us monitor the input fields while registering;
* This make sure we don't allow the user to register with empty fields
*/
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
registerAction.setEnabled(s.toString().trim().length() > 0);
}
@Override
public void afterTextChanged(Editable s) {
}
};
/*We want to watch all EditText fields for input*/
registerNameInput.addTextChangedListener(watcher);
registerEmailInput.addTextChangedListener(watcher);
registerUsernameInput.addTextChangedListener(watcher);
registerPasswordInput.addTextChangedListener(watcher);
}
registerDialog.show();
registerAction.setEnabled(false); //disabled by default
你是說你想在多個editText中添加同樣的TextWatcher? –
@ShreeKrishna是;根據其他的答案 - 我實施它的方式應該是一種方法來做到這一點。 – Nxt3