替代延迟Filter.filter()的过滤器请求,因为隐藏了Delayer接口?

时间:2016-02-26 06:45:40

标签: android android-adapterview

对于我已编写的适配器,我希望过滤器有一个小延迟(避免在每个重复键上启动过滤器操作并等待几分之一秒,直到用户放慢他/她的键入速度因为要过滤的列表可能非常大,并且过滤器操作将花费几百秒的时间。)

查看Filter类的源代码,它提供了这个机会,因为它有一个公共Delayer接口,用于在发布消息(通过sendMessageDelayed())时执行实际过滤器的延迟时间单独的工作线程(以脱离主UI线程)。它还会删除仍未在队列中执行的任何先前消息(由于延迟)。

到目前为止一切顺利。看起来非常简单,只需实现该接口并扩展Filter类。

但是,出于某种原因,设置Delayer的功能注释为@hide,因此严格来说,不应使用此功能,并且可以在以后的任何SDK更新中删除。这意味着我依靠它会很愚蠢。

解决这个问题的最佳方法是什么,而不必自己重新实现完整的Filter类(这看起来很愚蠢)?

我想一个替代选项是设置和使用我自己的处理程序线程并创建一个延迟消息来调用过滤器函数,但它看起来有点沉重?

1 个答案:

答案 0 :(得分:0)

实际上我认为最好的解决方案是拥抱Android的开源特性,并完全按照你(几乎)的建议行事:

  

自己重新实现完整的Filter类(这看起来很愚蠢   事情要做)

由于Delay相关代码已投入生产多年,因此使用起来应该是安全的。

我刚刚从API 23复制了Filter代码并删除了@hide注释。我重命名它以防止进口冲突,它似乎正在起作用。

我将它添加到Github中,以便在以后的项目中轻松重用: