У меня есть EditText, где пользователь может ввести название компании.У меня также есть ListView ниже этого EditText, который предлагает пользователю информацию о том, что уже добавлено в базу данных ...
<EditText android:id="@+id/txtBusinessName" android:hint="Name of Business" />
<ListView android:id="@+id/suggestionList"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</ListView>
Теперь, когда пользователь вводит, я проверяю введенное им ключевое слово в базе данных и получаючто он должен показать пользователю в ListView.В настоящее время при каждом событии key up, я вызываю новый AsyncTask следующим образом ...
EditText txtBusinessName = (EditText) findViewById(R.id.txtBusinessName);
txtBusinessName.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
if (v instanceof EditText) {
EditText txtBusinessName = ((EditText) v);
if (txtBusinessName.length() > 0) {
if (suggestionTask != null) {
suggestionTask.cancel(true);
suggestionTask = null;
}
suggestionTask = new GetCompaniesByKeywordAsyncTask(
AddBusinessActivity.this, s);
suggestionTask.execute(txtBusinessName.getText()
.toString());
}
}
}
return false;
}
});
Есть ли способ, которым у меня есть только один экземпляр AsyncTask, и я прошу его получить имена как пользовательские типыв EditText?Потому что создание слишком большого количества AsyncTask неэффективно и приведет к исключению.После заполнения имен я буду заполнять ListView. Могу ли я попросить ListView изменить свой размер в зависимости от содержимого внутри него?