更新[Xamarin.Android]后在RecyclerView中保存所选项目的位置
我正在制作一个应用程序,使用更新[Xamarin.Android]后在RecyclerView中保存所选项目的位置,android,image,xamarin,android-recyclerview,Android,Image,Xamarin,Android Recyclerview,我正在制作一个应用程序,使用recyclerView处理图像。我必须经常更新图片列表(3秒),但更新后-滚动到顶部。 要更新recyclerView我使用以下代码: adapter = new ImageAdapter(this, DrawableList); RunOnUiThread(() => recyclerView.SetAdapter(adapter)); 有没有办法在RecyclerView中保存滚动的位置或在后台更新 我必须经常更新图片列表(3秒),但更新后-滚动到顶部
recyclerView
处理图像。我必须经常更新图片列表(3秒),但更新后-滚动到顶部。
要更新recyclerView
我使用以下代码:
adapter = new ImageAdapter(this, DrawableList);
RunOnUiThread(() => recyclerView.SetAdapter(adapter));
有没有办法在RecyclerView
中保存滚动的位置或在后台更新
我必须经常更新图片列表(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
类,并覆盖我们可能需要使用的此类方法,例如:
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);
在Java中,我们有一种获取当前scrollX和scrollY的方法,即
recyclerView.getScrollX()
和recyclerView.getScrollY()
如果保存这些值,可以使用recyclerView.scrollTo(x,y)
滚动到旧位置。不起作用:C