我正在使用recyclerView
处理图片的应用。我必须经常更新图像列表(3秒)但更新后 - 滚动到顶部。
要更新recyclerView
,请使用以下代码:
adapter = new ImageAdapter(this, DrawableList);
RunOnUiThread(() => recyclerView.SetAdapter(adapter));
有没有办法在RecyclerView
中保存滚动位置或在后台更新?
答案 0 :(得分:3)
我必须经常更新图像列表(3秒),但在更新后 - 滚动到顶部。
我认为您可能只想在更新图片时将RecyclerView
滚动到最后,然后您可以像这样编码:
adapter = new ImageAdapter(imageAlbum);
recyclerView.SetAdapter(adapter);
recyclerView.ScrollToPosition(adapter.ItemCount - 1);
如果您想在更新图片时滚动到特定位置,目前暂无Api,与标准Android API不同,ScrollToPositionWithOffset
是Xamarin.Android中的虚拟方法,我们只能使用RecyclerView.ScrollToPosition
或LinearLayoutManager.ScrollToPosition
滚动到适配器中的特定项目。此外,目前还没有用于获取Xamarin.Android中第一个可见项的API,我们需要创建继承自LinearLayoutManager
类的LinearLayoutManager
并覆盖我们可能需要使用的方法,例如:< / p>
public class MyLinearLayoutManager : LinearLayoutManager
{
public MyLinearLayoutManager(Context context) : base(context)
{
}
public override int FindFirstVisibleItemPosition()
{
return base.FindFirstVisibleItemPosition();
}
public override void ScrollToPositionWithOffset(int position, int offset)
{
base.ScrollToPositionWithOffset(position, offset);
}
}
现在我们可以滚动到标准Android的具体位置:
scrollListener = new MyOnScrollListener();
...
var item = rvManager.FindFirstVisibleItemPosition();
adapter = new ImageAdapter(imageAlbum);
rv.SetAdapter(adapter);
//offset value 200 is fake, you can calculate by yourself
rvManager.ScrollToPositionWithOffset(item, 200);