我有一个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