[英]Android : Populate a spinner list with async task in a loop
我在使用多個異步任務填充微調框列表以獲取數據時遇到問題。
第一個問題是要顯示進度對話框並隱藏它嗎? (有多個異步任務的問題)
每次創建和設置新適配器是否正確?
這是我的代碼
public void getEntities(Entity account) {
final ArrayList <Entity> entities = new ArrayList <Entity>();
Log.i(TAG, String.valueOf(account.getRelationships().size()));
for(final Relationship relationship : account.getRelationships()) {
new SOAPCall() {
@Override
protected void onPostExecute(String soapResponse) {
final DataMap dm = ParseSoapResponse.parseEntity(soapResponse);
Entity ent = new Entity(dm.getDataMapArrayList("items").get(0).getString("displayName"));
ent.setLogicalName(relationship.getReferenceEntity());
entities.add(ent);
spinnerAdapterEntities = new ArrayAdapter <Entity> (getApplicationContext(), android.R.layout.simple_spinner_item, entities);
spinnerAdapterEntities.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
_spinner_entities1.setAdapter(spinnerAdapterEntities);
}
}.execute(SoapRequest.getInstance(getBaseContext()).getRetrieveEntityRequest(relationship.getReferenceEntity(), "Entity"));
}
}
AsyncTasks的效率很低,所以我建議僅使用一個AsyncTask。 那將解決您當前的所有問題。 您將在onPreExecute中顯示進度,在doInBackground中循環通過低谷關系,在onProgressUpdate中更新適配器,並在onPostExecute中隱藏進度。
使用onPreExecute()
和onPostExecute()
方法重寫AsyncTask類。
范例:
private class DoSomething extends AsyncTask<Void, Void, Void> {
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(context, null, "Loading...");
}
@Override
protected Void doInBackground(Void... params) {
// Do something here...
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
pd.dismiss();
}
}
對於您的情況來說,這是一個簡單的技巧,因為它是多個AsyncTask,所以請在SOAPCall
構造函數中以及每個AsyncTask的onPostExecute()
中初始化ProgressDialog,檢查ProgressDialog
是否為null。 如果不為null,則調用ProgressDialog.dismiss()
,否則不執行任何操作。
您不必每次都設置一個新的ADAPTER,因此很難控制數據源(ArrayList)。 制作一個自定義的Spinner適配器,實現自己的ArrayList更新方法,然后在更新陣列列表時調用SpinnerAdapter.notifyDataSetChanged()
。
PS:這是一個非常糟糕的做法,因此,請僅堅持使用一個AsyncTask。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.