我想做一些東西。我想在ListView
做懶加載。我的ListView
包含超過10,000個數據&只在TextView
。所以當我啓動列表活動時,我無法在第一次加載所有數據。這是不高效的,所以我可以加載列表中的第20或30項。當我滾動它們時,進一步加載ListView
的行。所以當我到達最後一個索引的最後一個索引ListView
時,我會放置進度條n它會注意到新數據被加載,所以那時新數據將加載最後一個+1索引。我怎樣才能做到這一點?Android listview懶惰加載
回答
您可以通過使用無限適配器實現來實現此目的。這正是你想要的。您還可以限制每次滾動刷新的行數。這裏是一個鏈接,
Android: Implementing progressbar and "loading..." for Endless List like Android Market
https://github.com/commonsguy/cwac-endless
要使用它,您擴展EndlessAdapter提供有關如何處理的無窮無盡的細節。具體來說,您需要能夠提供一個獨立於實際適配器中任何行的View行,它將用作佔位符,而另一種方法則是將實際數據加載到主適配器中。然後,藉助您的一點幫助,它可以無縫地轉換新數據。
謝謝老兄,讓我試試這個。 – Jai
鏈接現在壞了! :( –
//放在調用函數:
@Override
public View onCreateView(android.view.LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ScrollListener scrollListener = new ScrollListener();
listView.setOnScrollListener(scrollListener);
}
和內部類:
class ScrollListener implements OnScrollListener
{
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
int size = searchedPeople.size();
if(isScrolled && totalItemCount != 0 && size < totalPeoples)
{
if(firstVisibleItem + visibleItemCount >= totalItemCount)
{
yourfunction(size, size + limit); // call service in your functioin
isScrolled = false;
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
}
}
讓你列表中滾動更快: -
- 減少所使用的一些條件在您的適配器的
getView
中。 - 減少(限制每行滾動被刷新的次數)垃圾收集警告您在日誌
- 添加滾動功能獲得的數
添加onScrollListener到ListView。當用戶滾動時,檢查ListView是否接近結束。如果是,則獲取更多數據。舉個例子:
public abstract class LazyLoader implements AbsListView.OnScrollListener {
private static final int DEFAULT_THRESHOLD = 10 ;
private boolean loading = true ;
private int previousTotal = 0 ;
private int threshold = DEFAULT_THRESHOLD ;
public LazyLoader() {}
public LazyLoader(int threshold) {
this.threshold = threshold;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(loading) {
if(totalItemCount > previousTotal) {
// the loading has finished
loading = false ;
previousTotal = totalItemCount ;
}
}
// check if the List needs more data
if(!loading && ((firstVisibleItem + visibleItemCount) >= (totalItemCount - threshold))) {
loading = true ;
// List needs more data. Go fetch !!
loadMore(view, firstVisibleItem,
visibleItemCount, totalItemCount);
}
}
// Called when the user is nearing the end of the ListView
// and the ListView is ready to add more items.
public abstract void loadMore(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount);
}
活動:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnScrollListener(new LazyLoader() {
@Override
public void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// Fetch your data here !!!
}
});
}
}
你可以找到完整的實施at this link
- 1. Android懶惰加載沒有ListView
- 2. Android懶惰加載
- 3. 從懶惰的ListView的Android
- 4. 懶惰加載不加載
- 5. 懶惰加載flexslider
- 6. GWT懶惰加載
- 7. 懶惰加載Ninject
- 8. Autofac懶惰加載
- 9. Eclipselink懶惰加載
- 10. Android懶惰的圖像加載ListView無法正常工作
- 11. 懶惰加載怎麼辦?(android)
- 12. 學說懶惰加載
- 13. Hibernate懶惰加載HQL
- 14. 混淆懶惰加載
- 15. 是ZODB PersistentLists懶惰加載?
- 16. 懶惰在Blogger上加載
- 17. 動畫懶惰加載ArrayAdapter
- 18. 懶惰加載視圖
- 19. 懶惰加載CSS與js
- 20. jQuery mobile listviews懶惰加載
- 21. 用webpack懶惰加載angular2
- 22. 懶加載onclick listview
- 23. 懶惰加載和懶惰評估有什麼區別?
- 24. 在實體框架中加載懶惰集合太懶惰
- 25. 懶惰加載和卸載圖像
- 26. 懶惰的圖像加載和卸載
- 27. ListView上的懶惰加載圖像沒有被刷新
- 28. 懶惰加載圖像在ListView的前一篇文章?
- 29. Android中的Listview懶加載平滑
- 30. 懶惰加載和提供者策略
可以告訴你,你已經嘗試過什麼? – gideon
雅我已經在這裏添加圖像作爲例子..檢查這一個 – Jai
畢加索怎麼樣?這是否符合您的需求? http://square.github.io/picasso/ – phi