从Android Market获取灵感,我已经实现了一个无限列表,当我们到达列表末尾时,它会从服务器加载更多数据。
现在,我需要实施进度条& “正在加载..”文字显示为
从中获取灵感的示例代码会很棒。
答案 0 :(得分:5)
这是一个解决方案,可以在ListView加载时轻松显示加载视图。
您可以在此处查看课程:
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java - Helper使得可以使用这些功能而无需从SimpleListViewWithLoadingIndicator扩展。
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java - 当用户即将到达ListView的底部时,监听器开始加载数据。
https://github.com/CyberEagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java - EndlessListView。您可以直接使用此类或从中扩展。
答案 1 :(得分:2)
向ListView添加onScrollListener。当用户滚动时,检查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
答案 2 :(得分:1)
这里的其他答案是过时的,未维护的解决方案。但是,这篇文章似乎是最新的: https://github.com/codepath/android_guides/wiki/Endless-Scrolling-with-AdapterViews-and-RecyclerView
在SO答案中有太多的东西要写,但是在我编写此答案时,有一些重要的地方:
为
RecyclerView
实施无休止的分页需要执行以下步骤:
- 将EndlessRecyclerViewScrollListener.java复制到您的应用程序中。
- 在
addOnScrollListener(...)
上调用RecyclerView
以启用无穷大的分页。传入EndlessRecyclerViewScrollListener
的实例并实现onLoadMore
,它在需要加载新页面以填充列表时会触发。- 在上述
onLoadMore
方法中,通过发送网络请求或从其他来源加载将其他项目加载到适配器中。要开始处理步骤2和3的滚动事件,我们需要在
addOnScrollListener()
或Activity
中使用Fragment
方法,并传递{{1}的实例},如下所示:EndlessRecyclerViewScrollListener