更新[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