【发布时间】:2016-03-20 04:43:32
【问题描述】:
我是 Android 新手,所以我查阅了 AutoCompleteTextView 的文档。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, USERS);
AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.searchUserTextField);
textView.setAdapter(adapter);
我发现它只需很少的代码就可以启动并运行。
private static final String[] COUNTRIES = new String[] {
"user1", "user1", "user3", "user4", "user5"
};
我意识到这有点牵强,但是关于基于我的 ParseUser 表实现自动完成功能的下一步是什么,特别是当AutoCompleteTextView 中的文本一次更改一个字符时?显然,我不会使用 Parse 查询填充 USERS 数组,该查询会在每次尝试搜索时显示我的所有用户。我该如何合理安排这样的事情?
首先,我可能会添加一个TextChangedListener:
adapter.setNotifyOnChange(true);
textView.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if (count % 3 == 1) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
textview.setDropDownHeight(LayoutParams.WRAP_CONTENT);
adapter.clear();
// Run my background task here
}
}, 1000);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
textView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterview, View v,
int position, long arg3) {
// TODO Auto-generated method stub
searchUserTextField.setText(adapterview.getItemAtPosition(position)
.toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
但是我会提供什么作为后台任务?我在查询什么而不是一次搜索 1000 个用户,这就是我的应用中目前有多少用户?
【问题讨论】:
-
您的用例是什么?例如,您是否希望任何用户搜索任何用户?或者只是来自他们之前搜索过/联系过的人? ParseUser 表存储在哪里?
-
ParseUser 表是指查询 Parse 中的标准 User 类。我会说他们应该能够搜索任何用户,因此输入字母“s”将显示前 100 个以 s 开头的用户(我认为 Parse 默认将查询限制为 100);例如,键入“sa”会缩小搜索条件,以此类推,然后向“sally”方向发展。
-
也许只有在文本有一段时间没有改变的情况下才运行查询,也许是半秒左右。因此,当文本更改时,设置时间戳并延迟发布到处理程序。延迟后,如果时间戳未更改,则运行查询。就在我的脑海中。
标签: java android parse-platform autocomplete autocompletetextview