hun*_*eva 5 android android-adapter
我有3个AutoCompleteTextViews,我想在它们上注册2个String []适配器.目前,我这样做:
atw_from.setAdapter(new ArrayAdapter(ctx, android.r.layout.simple_dropdown_item_1line, stages_adapter));
Run Code Online (Sandbox Code Playgroud)
假设我的用户想输入"Középmező",他开始输入"Közé",他将会选择Középmező,直到这个,它非常简单.但是如果用户懒得键入重音(并且很多都是懒惰的),那么他只会输入Kozepmezo,然后他就不会得到任何报价,因为我的String []中没有Kozepmezo.我想要的是,如果他输入"Koze",他应该被提供给Középmező,所以即使他没有使用口音,他也会一直提供带有重音的实际单词.
目前,我有一个非常愚蠢的解决方案,我有一个String [],其大小是原始[]的两倍,前半部分包含带重音的单词,第二个包含deaccented版本.所以现在,如果他打字Közé,他将被提供Középmező,如果他输入Koze,他将被提供Kozepmezo.它的工作原理是因为服务器可以处理这两个版本,但它看起来很傻,我想解决它.
据我所知,我应该制作一个完整的自定义适配器.这是最好的方法,还是SDK中包含任何解决方案?如果我应该制作自定义适配器,有人能指出我正确的方向,如何做到这一点?:)
编辑:添加我自己的答案,应该为每个人工作,为其他答案欢呼,这导致我向好的方向!
好吧,在经历了很多痛苦的处理之后,这就是我最后所做的事情。这根本不是一个好的做法,我可能会做错,但至少它现在工作得很好。
只需 ctrl+c、ctrl+v 即可获取BaseAdapter的源代码,ctrl+c、ctrl+v 即可获取ArrayAdapter的源代码。现在看一下私有内部类ArrayFilter,特别是performFiltering方法。修改(不是覆盖!)它,只要你想要的,就我而言,我添加了很多 .replace("x","y") 东西,用于去重音部分。
无论我尝试什么,要么产生不可预测的强制关闭(很多,并且完全随机的),要么我无法做到这一点,因为太多的方法/变量是私有的,而不是受保护的。我必须说,谷歌应该重新审视这些代码......
注意:您实际上并不需要 ctrl+c ctrl+v BaseAdapter 代码,因为它是一个公共抽象类,但是嘿,它并不是那么多代码,这样一切都在那里,对您来说清晰可见。
干杯
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |