Я новичок в Android в целом, поэтому я просмотрел документацию для AutoCompleteTextView
.AutoCompleteTextView с Parse.com (Android)
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
изменяется на один символ за один раз? , Очевидно, я бы не заполнил массив USERS с помощью запроса Parse, отображающего всех моих пользователей при каждом попытке поиска. Как я мог бы логически устроить такое?
Начнем с того, что я, вероятно, включать в себя 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? – QuantumTiger
В таблице ParseUser я имел в виду запрос стандартного класса User в Parse. Я бы сказал, что они должны иметь возможность искать любого пользователя, поэтому ввод буквы «s» приведет к появлению первых 100 пользователей, которые начинаются с s (я думаю, что Parse ограничивает запрос до 100 по умолчанию); например, «sa» будет сузить критерии поиска и т. д., например, «в сторону». – santafebound
Возможно, только запустите запрос, если текст не изменился на некоторое время, может быть, что-то наполовину секундное. Поэтому, когда текст изменяется, установите метку времени и сообщение обработчику с задержкой. После задержки, если временная метка не изменилась, запустите запрос. Просто с головы. – nasch