我想做一些东西。我想在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懒惰加载
- 2. 懒惰加载不加载
- 3. Autofac懒惰加载
- 4. 懒惰加载Ninject
- 5. GWT懒惰加载
- 6. Eclipselink懒惰加载
- 7. Android懒惰的图像加载ListView无法正常工作
- 8. 懒惰加载CSS与js
- 9. 懒惰在Blogger上加载
- 10. 是ZODB PersistentLists懒惰加载?
- 11. 混淆懒惰加载
- 12. 学说懒惰加载
- 13. 动画懒惰加载ArrayAdapter
- 14. Hibernate懒惰加载HQL
- 15. 用webpack懒惰加载angular2
- 16. 懒惰加载视图
- 17. jQuery mobile listviews懒惰加载
- 18. 懒惰加载和懒惰评估有什么区别?
- 19. 在实体框架中加载懒惰集合太懒惰
- 20. ASP.NET持久缓存(“懒惰加载”式?)
- 21. jsTree v.3懒惰加载ajax调用
- 22. jQuery懒惰加载 - 显示问题:无
- 23. iOS 5 ARC懒惰图像加载库
- 24. 主义:懒惰加载属性
- 25. 懒惰加载儿童儿童(EF)
- 26. 加载懒惰代理属性
- 27. 懒惰加载nhibernate一对一
- 28. MVC3懒惰模型绑定/加载
- 29. 懒惰加载不起作用
- 30. 懒惰加载批量数据集Keras
可以告诉你,你已经尝试过什么? – gideon
雅我已经在这里添加图像作为例子..检查这一个 – Jai
毕加索怎么样?这是否符合您的需求? http://square.github.io/picasso/ – phi