私はユーザーがビジネスの名前を入力できるEditTextを持っています。また、私は今、ユーザーの種類として、私は、データベースに、彼らは入力されたキーワードをチェックし、何それを取得し、すでにデータベースに追加されるかについて、ユーザーを提案し、こののEditText以下のListView ...Android効率的なAsyncTask
<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>
を持っていますリストビューでユーザーを表示する必要があります。イベントが発生し、すべてのキーまでに、私はこのように新しい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にコンテンツの内容に基づいてサイズ変更を依頼できますか?
AsyncTaskオブジェクトにキューコレクションを維持する必要がありますか? – Neutralizer
AsyncTaskオブジェクトの外部でキューを使用するつもりがない場合は、AsyncTaskのインスタンス変数として保持するのが理にかなっています。キューの場合、[BlockingQueue](http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html)を利用してみてください。 – momo
良い仕事。 ListViewが読み込まれたら、そのコンテンツに基づいてサイズを変更する方法を知っていますか? – Neutralizer