我有自己的字典应用程序WordYard,每当我们输入AutoCompleteTextView时,我会在下拉列表中显示单词列表。
在autoCompleteTextView的addTextChangedListener中,我在sqlite数据库中查询书面文本。由于数据库是非常庞大的1.5个字,因此制作特定文本的arraylist需要时间。
假设我写了一个' A'那么这个字符串将在数据库中搜索并写入从'A'开始的限制15数据的arraylist中。在滚动下拉列表时,我在适配器的getView中添加了下15个单词。
滚动很好,但每当我输入autocompleteTextview从数据库读取15个单词时,如果我们写得更快,则需要时间。请告诉我是否有其他方法可以让我的应用程序更好。
答案 0 :(得分:1)
每次在AutoCompleteTextView
内输入任何内容时,都会向相对较大的数据库发送查询,从而导致(合理的)延迟。
addTextChangedListener (TextWatcher watcher);
方法需要TextWatcher
个对象才能运行。您将要创建一个TextWatcher
并覆盖它的afterTextChanged (Editable s)
方法,以便不经常对您的数据库执行查询。您还需要一个自定义Filter
。
autoCompleteTextView.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
yourAdapter.getFilter().filter(s);
}
然后您将创建一个扩展[Filter][1]
的类,并覆盖适合您需要的方法。
例如,优化您的实现,只有在输入4个字符或经过一段时间后才发送查询。