2016-12-15 60 views
1

我正在製作應用程序,我正在使用recyclerView來處理圖像。我必須經常更新圖像列表(3秒),但在更新之後 - 滾動將會最高。 要更新recyclerView我用這個代碼:更新後在RecyclerView中保存所選項目的位置[Xamarin.Android]

adapter = new ImageAdapter(this, DrawableList); 
RunOnUiThread(() => recyclerView.SetAdapter(adapter)); 

有什麼辦法來保存RecyclerView滾動的位置或在後臺更新?

+0

在Java中,我們有一個方法來獲得當前scrollX和scrollY爲'recyclerView.getScrollX()'和'recyclerView.getScrollY()'如果保存這些值,你可以使用'recyclerView.scrollTo(x,y)'滾動到舊的位置。 –

+0

不工作:C – bigjoe1

回答

2

我必須經常更新圖像列表(3秒),但更新後 - 滾動將頂部。

我認爲當你更新你的形象有可能你只是想保持你的RecyclerView滾動以結束,那麼你可以簡單地這樣的代碼:

adapter = new ImageAdapter(imageAlbum); 
recyclerView.SetAdapter(adapter); 
recyclerView.ScrollToPosition(adapter.ItemCount - 1); 

如果要滾動到更新圖片時的具體位置,目前沒有現在的Api,不像標準Android API,ScrollToPositionWithOffset是Xamarin.Android中的虛擬方法,我們只能使用RecyclerView.ScrollToPositionLinearLayoutManager.ScrollToPosition滾動到適配器中的特定項目。也有是獲得在Xamarin.Android第一個可見項目不存在API,我們需要建立我們LinearLayoutManagerLinearLayoutManager類繼承並重寫這些方法,我們可能需要使用,例如:

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); 
相關問題