我有一個20 EditTexts
它的活動。如果輸入了任何內容,我想顯示一條消息。有沒有辦法知道輸入是否被提供(數據改變)?如何知道用戶是否在沒有字段監聽器的情況下進行了輸入?
回答
一個想法,這是一個基類,它是在使用他們的任何EditText
小部件(如果有的話)通知子類的保健的一個例子。根據你在用戶輸入內容時你想要做什麼,你可能需要改變我的示例以適合你的特定情況。
基地活動從中你會繼承:
public abstract class BaseTextWatcherActivity extends Activity {
private TextWatcher mInputObserver = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
onInputChange(s.toString());
}
};
private boolean mOptimize = false;
@Override
public void setContentView(int layoutResID) {
View content = getLayoutInflater().inflate(layoutResID, null);
initInputsObservers((ViewGroup) content);
mOptimize = true;
super.setContentView(content);
}
@Override
public void setContentView(View view) {
if (view instanceof EditText) {
((EditText) view).addTextChangedListener(mInputObserver);
} else if (view instanceof ViewGroup && !mOptimize) {
initInputsObservers((ViewGroup) view);
mOptimize = false;
}
super.setContentView(view);
}
/**
* Implement this method to allow your activities to get notified when one
* of their {@link EditText} widgets receives input from the user.
*
* @param s the string that was entered by the user in one of the EditTexts.
*/
public abstract void onInputChange(String s);
/**
* This will recursively go through the entire content view and add a
* {@link TextWatcher} to every EditText widget found.
*
* @param root
* the content view
*/
private void initInputsObservers(ViewGroup root) {
final int count = root.getChildCount();
for (int i = 0; i < count; i++) {
final View child = root.getChildAt(i);
if (child instanceof EditText) {
((EditText) child).addTextChangedListener(mInputObserver);
} else if (child instanceof ViewGroup) {
initInputsObservers((ViewGroup) child);
}
}
}
}
然後你在你的活動做的是落實onInputchange
回調,讓你知道,用戶從輸入了什麼東西在EditTexts
之一目前的佈局。您可能希望查看活動類中的關鍵事件回調以獲得更簡單的內容,但如果我沒有弄錯,則這些事件將被小組件所使用。
完美!正是我在找什麼。我今天會試一試 – Snake
讓你的TextViews都叫addTextChangedListener()給他們你的活動作爲參數(這一點)。讓您的活動執行TextWatcher並覆蓋afterTextChanged()。 每當TextView發生更改時,afterTextChanged()都會被調用。 這裏是你的代碼應該是什麼樣子
public class YouActivity extends Activity implements TextWatcher{
@Override
public void onCreate(Bundle savedInstanceState)
{
[...]
textView1.addTextChangedListener(this);
textView2.addTextChangedListener(this);
[...]
}
@Override
public void afterTextChanged (Editable s)
{
//do something
}
}
我一直在尋找一種解決方案,它不涉及我的問題中提到的所有字段監聽器。例如,也許是活動更改的通用聽衆?鍵盤輸入..等等? – Snake
沒有聽衆,你不知道視圖是否改變。 聽着鍵盤?一個選項,但每次按下按鈕時都會收到通知(而不是在TextView中)。是否有你不想使用監聽器的原因? –
您仍然會收到一封關於textWatcher放入edittext的每封信的通知。我不想使用lsitener的原因是因爲我有超過10個活動,每個活動都有edittexts和spinners。我想創建所有這些活動擴展的基本活動,並在該基本活動中「做某件事」,以便在任何底層活動字段發生變化時顯示消息。 – Snake
- 1. 如何在沒有文本字段的情況下監聽鍵盤輸入Java
- 2. 如何在沒有用戶輸入的情況下添加Crontab?
- 3. 如何知道用戶是否在QTableView中輸入了數據
- 4. 在沒有套接字監聽的情況下創建UDP客戶套接字
- 5. django makemigrations在沒有用戶輸入的情況下重命名字段
- 6. 如何在沒有監聽器的情況下獲得javafx媒體元數據
- 7. 如何在沒有Javascript的情況下強制輸入數字?
- 8. 當窗口打開?如何知道窗口在沒有監聽窗口事件的情況下打開?
- 9. 如何防止keydown事件監聽器在輸入到文本字段時進行監聽?
- 10. 在不知道用戶輸入是什麼的情況下進行查詢(SQL,PHP)
- 11. 如何知道tcp服務器是否處於監聽狀態
- 12. 如何在事先不知道輸入值的情況下設計輸入?
- 13. 是否可以在沒有累加器的情況下寫入?
- 14. 在沒有用戶輸入的情況下安裝apk
- 15. VBscript在沒有用戶輸入的情況下結束
- 16. 參考父表在沒有用戶輸入的情況下
- 17. 我想知道用戶是否移動到了新行而沒有按下textarea元素中的輸入按鈕
- 18. 在沒有通過網站通知用戶的情況下進行考勤
- 19. 如何知道在特定情況下
- 20. 在沒有按下輸入Java的情況下輸入
- 21. 這是否在沒有用戶許可的情況下工作?
- 22. 在不知道n值的情況下獲取用戶輸入的n值
- 23. 如何在沒有jQuery的情況下進行AJAX調用?
- 24. 如何知道所選元素是否爲輸入字段?
- 25. 是否有任何理由在沒有優化的情況下進行編譯?
- 26. 如何在不進入AJAX的情況下對一行html輸入字段進行重新排序
- 27. 在沒有顯式訪問器的情況下監聽ElementList上的事件
- 28. Java Swing:在沒有觸發監聽器的情況下清除JList
- 29. 如何在沒有用戶輸入的情況下生成kerberos令牌
- 30. 如何在沒有後端的情況下保存用戶輸入
最簡單的方法是將一個'TextWatcher'附加到這些'EditTexts',並且如果你看到在'afterTextChanged'方法中得到文本,那麼你就會知道你有一個'EditTexts'輸入。 – Luksprog
我正在尋找一種解決方案,不涉及所有字段監聽器,如我的問題所述。例如,也許是活動更改的通用聽衆?鍵盤輸入..等等? – Snake