我知道我们可以使用TextWatcher
向EditTexts
添加addTextChangedListener
并使用removeTextChangedListener
将其删除。但现在我想检查我的EditText
是否有TextWatcher
。
我该怎么做?
我有一个网格。它有一个适配器。我的适配器检查定义项的类型是否为EditText,向其添加TextWatcher
。当方法getView
被调用时,TextWatcher
被添加到EditText
。如果添加了TextWatchers
,我想避免添加额外的{{1}}。
答案 0 :(得分:4)
那么有一些解决办法,您可以使用View的setTag
方法在getview方法中为您的edittext设置标记,然后在执行此检查之前,如果getTag不为null,那么您已经设置了TextWatcher
。 ..
if(editText对象getTag为null然后是editText.seTtag并添加观察者) 否则返回
答案 1 :(得分:1)
您可以创建Map
来存储所有EditText
个TextWatcher
个对象
例如
Map<EditText, Boolean> textWatcherMap = new HashMap<>();
将TextWatcher
添加到EditText
时,请添加对HashMap
的引用。
TextWatcher textWatcher = new TextWatcher(..);
EditText editText = (EditText) findViewById(R.id.editTextId);
editText.addTextChangedListener(textWatcher);
textWatcherMap.put(editText, true);
然后,当您使用EditText
时,请检查HashMap
以获取参考
if(textWatcherMap.get(editText) != null)
useCurrentTextWatcher();
else
{
addNewTextWatcher();
textWatcherMap.put(editText, true);
}
答案 2 :(得分:0)
没有API专门执行此操作。为什么不保持一个布尔变量,自己说textWatch
?
每次设置观察者时,将其设置为true,并在删除观察者时将其设置为false。
您只需检查此变量即可查看editText是否有观察者。
如果您有多个需要检查的editText框,则可以使用布尔数组。
答案 3 :(得分:0)
你可以打电话
edittext.removeTextChangedListener(YourWatcherObject)
每次添加一个新的观察者之前,它不能有多个观察者
edittext.addTextChangedListener(YourWatcherObject)