Xamarin.Android中滚动ListView的分页

时间:2018-10-15 06:49:41

标签: xamarin.android

任何人都可以帮助我了解xamarin.android中listview滚动时如何实现分页处理。任何链接或任何示例都将有所帮助

1 个答案:

答案 0 :(得分:0)

与iOS相比,Android分页非常简单,可以按以下步骤进行操作:

 public class EndlessScrollListener : Java.Lang.Object, Android.Widget.AbsListView.IOnScrollListener
{

    private int visibleThreshold = 5;
    private int currentPage = 0;
    private int previousTotal = 0;
    private bool loading = true;

    public EndlessScrollListener()
    {
    }
    public EndlessScrollListener(int visibleThreshold)
    {
        this.visibleThreshold = visibleThreshold;
    }

    public void OnScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
    {
        if (loading)
        {
            if (totalItemCount > previousTotal)
            {
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
        }
        if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold))
        {
            // I load the next page of gigs using a background task,
            // but you can call any function here.
            //new LoadGigsTask().execute(currentPage + 1);
            loading = true;
        }   
    }

    public void OnScrollStateChanged(AbsListView view, [GeneratedEnum] ScrollState scrollState)
    {
        //  throw new NotImplementedException();
    }


}

然后将其设置为列表视图,如下所示:

List.SetOnScrollListener(new EndlessScrollListener());

工作代码:

  • visibleThreshold –在加载更多内容之前,要低于当前滚动位置的最小项目量。
  • currentPage –您已加载的数据的当前页面。
  • previousTotal –上次加载后数据集中的项目总数。
  • loading –如果我们仍在等待最后一组数据加载,则为true。

接下来,我们有几个构造函数,允许我们根据需要设置内联的visibleThreshold。

每次滚动列表时,都会调用我们拥有的第一个重写方法。在滚动过程中,这种情况每秒发生很多次,因此请注意此处放置的代码。我们提供了一些有用的参数来帮助我们确定是否需要加载更多数据,但是首先,我们检查是否正在等待之前的加载完成。

如果仍在加载,我们将检查数据集计数是否已更改,如果已更改,则可以得出结论,它已完成加载并更新当前页码和项目总数。

如果当前未加载,请检查是否违反了visibleThreshold并需要重新加载更多数据。如果确实需要重新加载更多数据,则执行后台任务并将加载标志设置为true。从而永远解决问题!

我们不需要该类中的最后一个方法,但是,如果您感兴趣的话,它主要用于通过scrollState参数来跟踪滚动动作本身的变化。

最后,调用该类的代码将创建一个EndlessScrollListener的新实例,并将其绑定到我的ListView。当然,将您自己的ListView代替List。