Last active
March 18, 2024 22:13
-
-
Save martijn00/a45a238c5452a273e602 to your computer and use it in GitHub Desktop.
Load more / endless scroll for Xamarin RecyclerView
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) | |
{ | |
var view = base.OnCreateView(inflater, container, savedInstanceState); | |
var recyclerView = view.FindViewById<RecyclerView>(Resource.Id.my_recycler_view); | |
if (recyclerView != null) | |
{ | |
recyclerView.HasFixedSize = true; | |
var layoutManager = new LinearLayoutManager(Activity); | |
var onScrollListener = new XamarinRecyclerViewOnScrollListener (layoutManager); | |
onScrollListener.LoadMoreEvent += (object sender, EventArgs e) => { | |
//Load more stuff here | |
}; | |
recyclerView.AddOnScrollListener (onScrollListener); | |
recyclerView.SetLayoutManager(layoutManager); | |
} | |
return view; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class XamarinRecyclerViewOnScrollListener : RecyclerView.OnScrollListener | |
{ | |
public delegate void LoadMoreEventHandler(object sender, EventArgs e); | |
public event LoadMoreEventHandler LoadMoreEvent; | |
private LinearLayoutManager LayoutManager; | |
public XamarinRecyclerViewOnScrollListener (LinearLayoutManager layoutManager) | |
{ | |
LayoutManager = layoutManager; | |
} | |
public override void OnScrolled (RecyclerView recyclerView, int dx, int dy) | |
{ | |
base.OnScrolled (recyclerView, dx, dy); | |
var visibleItemCount = recyclerView.ChildCount; | |
var totalItemCount = recyclerView.GetAdapter().ItemCount; | |
var pastVisiblesItems = LayoutManager.FindFirstVisibleItemPosition(); | |
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) { | |
LoadMoreEvent (this, null); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
this is more accurate,