我有一個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>
現在,當用戶類型,我檢查自己輸入關鍵字,在數據庫和檢索什麼必須在ListView中顯示用戶。目前,在每一個關鍵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根據其中的內容重新調整自己的大小嗎?
我需要在AsyncTask對象中維護一個隊列集合嗎? – Neutralizer
如果您不打算在AsyncTask對象之外使用隊列,只需將其保存爲AsyncTask的實例變量就可以了。對於隊列你可能想嘗試利用[BlockingQueue](http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html) – momo
好的工作。你知道一旦ListView被填充,我如何根據其內容重新調整大小? – Neutralizer