我在ListView上使用自定义适配器实现了一个滚动侦听器。我的想法是,如果列表是滚动的,我不会加载需要更多思考时间的数据(例如检查本地SQLite DB上可能存在的大表)
我为听众提供的代码如下:
public class ScrollListener : AbsListView.IOnScrollListener
{
private readonly ListView _list;
public ScrollListener(ListView list)
{
_list = list;
}
#region Implementation of IDisposable
public void Dispose()
{
}
#endregion
#region Implementation of IJavaObject
public IntPtr Handle { get; private set; }
#endregion
#region Implementation of IOnScrollListener
public void OnScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
}
public void OnScrollStateChanged(AbsListView view, ScrollState scrollState)
{
var adapter = (CaseListAdapter) _list.Adapter;
if (scrollState != ScrollState.Idle)
{
adapter.IsScrolling = true;
}
else
{
adapter.IsScrolling = false;
adapter.NotifyDataSetChanged();
}
}
#endregion
}
然后我将其设置为:
_caseTable.SetOnScrollListener(new ScrollListener(_caseTable));
这个对象肯定是在这里创建的,但由于某种原因,当我开始或停止滚动时,根本没有调用OnScrollStateChanged
方法。
我是否遗漏了一些明显的东西,或者是否有更好的方法来检查列表是否滚动?我一直在努力让这个ListView顺利滚动几天,我找到的建议似乎没有任何差别,甚至无法正常工作。
答案 0 :(得分:1)
我在这篇文章中看到了评论:
implementing OnScrollListener for MvxListView
由Cheesebaron ......它有效。
这是我修改后的代码:
_caseTable.ScrollStateChanged += (o, e) =>
{
var adapter = (CaseListAdapter)_caseTable.Adapter;
if (e.ScrollState != ScrollState.Idle)
{
adapter.IsScrolling = true;
}
else
{
adapter.IsScrolling = false;
adapter.NotifyDataSetChanged();
}
};