【问题标题】:How to check if my EditText has a TextChangedListener (TextWatcher)?如何检查我的 EditText 是否有 TextChangedListener (TextWatcher)?
【发布时间】:2013-01-02 05:22:25
【问题描述】:

我知道我们可以使用addTextChangedListenerTextWatcher 添加到EditTexts,并使用removeTextChangedListener 将其删除。但现在我想检查我的EditText 是否有任何TextWatcher

我该怎么做?

我有一个网格。它有一个适配器。我的适配器检查已定义项目的类型是否为 EditText 添加TextWatcher 到它。当方法getView 被调用时,TextWatcher 被添加到EditText。如果添加了TextWatchers,我想避免添加额外的。

【问题讨论】:

  • 这个的目的是什么。可能有一种更直接的方法来完成您正在尝试做的事情。
  • @mrres1 我更新了我的问题
  • 如果您在适配器中正确使用convertView,您可以轻松确保每个EditText 中只添加一个TextWatcher。 (if(convertView == null) /* Inflate a view and add a TextWatcher */)
  • @mrres1 我愿意。所以 EditText 存在。在您的代码行之后,我添加了我的 TextWatcher。因此,每次刷新 Grid 时它都会获得额外的 TextWatchers。

标签: android listener textwatcher textchanged


【解决方案1】:

有一个解决方法,您可以使用 View 的 setTag 方法在 getview 方法中为您的 edittext 设置标签,然后在执行此操作之前检查 getTag 是否不为空,如果您已经设置了 TextWatcher...

if(editText object getTag 为 null 然后 editText.setTtag 并添加观察者) 否则返回

【讨论】:

    【解决方案2】:

    没有专门执行此操作的 API。为什么不自己维护一个布尔变量,比如textWatch

    每次设置观察者时,将其设置为 true,并在移除观察者时将其设置为 false。

    你可以简单地检查这个变量来查看editText是否有观察者。

    如果您有多个需要检查的 editText 框,则可以使用一组布尔值。

    【讨论】:

      【解决方案3】:

      您可以创建一个Map 来存储所有具有TextWatcherEditText 对象

      例如

      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);
      }
      

      【讨论】:

        【解决方案4】:

        你可以打电话

        edittext.removeTextChangedListener(YourWatcherObject)
        

        在每次添加新的观察者之前,它不能有多个观察者

        edittext.addTextChangedListener(YourWatcherObject)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-16
          • 1970-01-01
          相关资源
          最近更新 更多