Android:为Android Market等无尽列表实现进度条和“加载…”

从Android Market获得灵感,我实现了一个无限列表,当我们到达列表的末尾时,从服务器载入更多的数据。

现在,我需要实现进度条&“加载..”文本所示 替代文字

示例代码从中获取灵感将是巨大的。

这是一个解决scheme,它也使得在加载ListView的末尾显示加载视图变得非常容易。

你可以在这里看到这些课程:

https://github.com/Cyber​​Eagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/helper/ListViewWithLoadingIndicatorHelper.java – 帮手,使之有可能使用没有从SimpleListViewWithLoadingIndicator扩展的function。

https://github.com/Cyber​​Eagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/listener/EndlessScrollListener.java – 当用户开始加载数据的监听器即将到达ListView的底部。

https://github.com/Cyber​​Eagle/OpenProjects/blob/master/android-projects/widgets/src/main/java/br/com/cybereagle/androidwidgets/view/SimpleListViewWithLoadingIndicator.java – EndlessListView。 你可以直接使用这个类,或者直接使用这个类。

将一个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 !!! } }); } } 

你可以在这个链接find完整的实现