カスタム アダプターを使用して 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 をスムーズにスクロールできるように数日間取り組んできましたが、私が見つけた提案はどれも違いを生んだり、正しく機能したりするようには見えません。