我想知道我應該如何實現一個ListAdapter
異步加載其視圖到ListView
?我想這樣做是因爲我使用來自數據庫的信息來填充列表,這使得我的活動時間有點慢。如何異步填充列表視圖?
回答
您可以使用AsyncTask
並使用onPostExecute
方法來發布十歲上下的新加載的結果:
private ArrayAdapter adapter = new YourArrayAdapter();
private class YourAsyncTask extends AsyncTask<Void, Void, List<YourItem>> {
@Override
protected void onPreExecute() {
// start loading animation maybe?
adapter.clear(); // clear "old" entries (optional)
}
@Override
protected List<YourItem> doInBackground(Void... params) {
// everything in here gets executed in a separate thread
return DataBase.getItems();
}
@Override
protected void onPostExecute(List<YourItem> items) {
// stop the loading animation or something
adapter.addAll(items);
}
}
使用AsyncTask.
這可以幫助您在後臺檢索數據。
我用AsyncTasks頻繁,但我怎麼落實到一個listadapter?我正在嘗試創建一個列表,在完成加載時顯示一個視圖。使用asynctask設置listadapter將在後臺加載整個列表,然後顯示信息。我正在尋找一次加載一個列表項並將其顯示在列表中的實現。 – 2011-05-11 17:13:53
最簡單的就是使用的AsyncTask做加載並調用publishProgress
爲每個項目被加載(或者,如果要加載的所有項目,並讓它們出現一次全部,更新UI中onPostExecute
.notifyDataSetChanged()可能是你在做什麼之後?每次向列表中添加一個支持ArrayAdapter的新項目時,都可以在該適配器實例上調用.notifyDataSetChanged()來告訴它刷新。逐漸建立並顯示添加到列表中的每個項目。
我到目前爲止看到從CommonsWare最好的辦法。它被發現在這個相關的answer。
public class AsyncDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet", "consectetuer",
"adipiscing", "elit", "morbi",
"vel", "ligula", "vitae",
"arcu", "aliquet", "mollis",
"etiam", "vel", "erat",
"placerat", "ante",
"porttitor", "sodales",
"pellentesque", "augue",
"purus"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList<String>()));
new AddStringTask().execute();
}
class AddStringTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String item : items) {
publishProgress(item);
SystemClock.sleep(200);
}
return(null);
}
@Override
protected void onProgressUpdate(String... item) {
((ArrayAdapter<String>)getListAdapter()).add(item[0]);
}
@Override
protected void onPostExecute(Void unused) {
Toast
.makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
.show();
}
}
}
使用Kotlin和Kotlin擴展庫,該任務變得更容易。您可以在名爲Anko的庫中使用doAsync/uiThread構造,並使用部分代碼。在下面的鏈接教程中,我使用這個庫來填充一個ListView,其中股票報價與Kotlin異步調用REST API。科特林完全集成到Android的工作室:
http://www.todroid.com/creating-a-stock-pricing-application-with-kotlin-for-android/
- 1. 從異步任務填充片段列表視圖
- 2. 無法從異步任務填充列表視圖
- 3. 如何填充GridView異步
- 4. 如何用段填充列表視圖?
- 5. 填充列表視圖
- 6. 填充列表視圖
- 7. 異步列表視圖
- 8. DataAdapter填充異步異常
- 9. 如何根據2個布爾表列填充列表視圖?
- 10. 通過AddRange填充列表視圖
- 11. 從ListAdapter或SimpleCursorAdapter填充列表視圖
- 12. 填充粘滯列表視圖Android
- 13. 從webservice填充列表視圖
- 14. 從JSON填充jquerymobile列表視圖
- 15. 使用mvvm填充列表視圖
- 16. 從數據庫填充列表視圖
- 17. SQLite和填充列表視圖,android
- 18. 列表視圖不填充其父
- 19. 填充的ListView,空列表視圖
- 20. 動態填充列表視圖的Android
- 21. 使用arrayadapter填充列表視圖
- 22. 列表視圖填充問題
- 23. 動態填充列表視圖
- 24. android arraylist對象填充列表視圖
- 25. 填充列表視圖與一個ArrayList
- 26. 值不填充在列表視圖
- 27. 從組合框填充列表視圖
- 28. 使用Knockoutjs填充JqueryMobile列表視圖
- 29. 使用DataReader填充列表視圖vb.net
- 30. 使用光標填充列表視圖
謝謝!當我明天回去工作時,會嘗試這個:)沒有想過這樣做 – 2011-05-11 17:31:08
嗨,什麼樣的適配器可以清除或添加項目? – Hamidreza 2014-08-11 12:19:56