2016-06-29 17 views
1

Wenn ich neue Daten zu meinem RecycleView hinzufüge, wenn ich oben in der Ansicht bin, dann werde ich ein wenig runtergescrollt. Wie scrolle ich korrekt zum Anfang eines RecycleView? Ich habe versucht:Wie scrollt man nach oben von RecycleView?

boolean isAtTop = !mRecyclerView.canScrollVertically(-1); 
mRecyclerAdapter.updateMessageItemDataList(mMessageItems); 
if (isAtTop) 
    mRecyclerView.scrollToPosition(0); 

Aber das tut nichts (ich werde immer noch ein wenig heruntergerollt). Ich suchte auf Stack-Überlauf und fand die folgenden, die noch nicht anythnig machen:

boolean isAtTop = !mRecyclerView.canScrollVertically(-1); 
mRecyclerAdapter.updateMessageItemDataList(mMessageItems); 
if (isAtTop) 
    ((LinearLayoutManager)mRecyclerView.getLayoutManager()).scrollToPositionWithOffset(0, 0); 

isAtTop immer richtig erkannt wird, aber meine Versuche, bis an die Spitze zu blättern zurück nie funktionieren. Hat jemand jemals ein ähnliches Problem festgestellt?

Es ist wirklich komisch, weil ich mich richtig auf den unteren Rand der Ansicht blättern kann

mRecyclerView.scrollToPosition(mRecyclerAdapter.getItemCount() - 1); 
+0

Vielleicht weil es 'sein muss, wenn (! isAtTop)' – Vucko

+0

Nein, ich will nur blättern th Oben, wenn es bereits oben war, bevor neue Daten hinzugefügt wurden. – CaptainForge

+0

Ah, okay, ich habe es dann falsch verstanden. Haben Sie [diese Frage] (http://stackoverflow.com/questions/32159724/scroll-to-top-in-recyclerview-with-linearlayoutmanager) versucht? – Vucko

Antwort

0

mit Vielleicht wird dies nützlich sein (in meinem Fall funktioniert):

final LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(this); 
mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
myRecycler.setLayoutManager(mLinearLayoutManager); 
myRecycler.setHasFixedSize(true); 

... 
anyButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (mLinearLayoutManager != null) { 
      myRecycler.scrollToPositionWithOffset(0, 0); 
     } 
    } 
}); 
0

arbeiten in meinem Fall #salamtempe

ActionButon.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if (new LinearLayoutManager(getActivity()) != null) { 
      mRecyclerView.smoothScrollToPosition(0); 
     } 
    } 
});