在android中加载自动完成视图建议的最佳方法

时间:2012-09-21 09:45:45

标签: java android autocompletetextview

这是我在android中的第一个应用程序。我想知道这是否是最好的方法。我正在尝试使用mysql db中的数据加载自动完成的textview。根据用户输入的文本从db中检索此数据。

这就是我这样做的方式。

1.在自动完成视图中添加了一个textwatch监听器。在afterTextchanged方法中,我调用一个异步任务,它使用php Web服务连接到db并从mysql表中检索数据并加载到数组中。在执行该任务后,我正在设置适配器。(数组适配器)。

我的问题是,对于输入/修改的每个字母都会调用aftertextchanged,此处会调用db调用。因此,保留所有数据库代码,这是好事。加载列表也需要时间。

还有其他最好的方法。

感谢您的回复。

2 个答案:

答案 0 :(得分:2)

将新字符添加到输入框时,取消正在获取建议的正在进行的AsyncTask,并使用新参数启动新建议。并向用户表明正在加载建议,以便用户可以选择等待,如果他愿意。

以下是解释取消AsyncTask的理想方式的帖子:Ideal way to cancel an executing AsyncTask

<强> 更新

如果您在第一个字符输入上缓存Asynctask的所有结果(不需要取消),则可以逐渐加快用户在编辑框中输入更多字符的速度,因为这将是初始列表包含以第一个字符开头的所有字符串。以下所有结果(在新字符上,即第2,第3 ......)将是此列表的子集。使用ArrayAdapter管理列表。编辑框应为AutoCompleteTextView.

这样你只需要为第一个字符运行asynctask。

更新2: 您可以在onCreate中试用此代码。听起来像是一个更好的选择..

    AutoCompleteTextView act = 
                        (AutoCompleteTextView)findViewById(R.id.act_contact);
    ContentResolver content = getContentResolver();
    Cursor cursor = content.query(
                            ContactsContract.Contacts.CONTENT_URI, 
                            PEOPLE_PROJECTION, null, null, null);
    ContactListAdapter adapter = new ContactListAdapter(this, cursor);
    act.setAdapter(adapter);

答案 1 :(得分:0)

您可以尝试使用Android本地数据库来存储服务器中的数据,然后使用本地数据库填充ArrayAdapter,这肯定会提高性能。

希望它有所帮助...