2017-10-15 2 views
0

I recyclerView in meiner Anwendung verwendet habe, und will eine Scroll bis zu Top-Taste in hinzufügen, dass ich auf die Schaltfläche in hinzugefügt, kann aber nicht in der Lage sein, Um meine RecyclerView auf der Oberseite zu scrollen, wenn ich auf die Schaltfläche klicke, habe ich auch umgekehrt mein RecyclerView, so dass der neue Beitrag, den ich hinzufügen in es kommt oben nicht auf der Unterseite. Bitte hilf mir, vielen Dank im Voraus. Ich habe auch getPosition Methode verwendet, aber das hat nicht für mich funktioniert.Zurück nach oben von recyclerView in Android mit einer Taste

Ich bin mit Android Studio

Scroll-Action-Klasse-Datei Code:

public class HomePage extends AppCompatActivity { 

private FirebaseAuth mAuth; 
private RecyclerViewPager mrecyclerView; 
private DatabaseReference mDatabaseReference; 
private Button rollUp; 
public static int recyclerPos = 0; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home_page); 
    mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("post"); 
    mrecyclerView = (RecyclerViewPager) findViewById(R.id.list); 
    final LinearLayoutManager layout = new LinearLayoutManager(HomePage.this, LinearLayoutManager.VERTICAL, false); 
    layout.setReverseLayout(true);//<---- to get new posted data on top of list 
    layout.setStackFromEnd(true);//<----- 
    mrecyclerView.setLayoutManager(layout); 
    rollUp = (Button) findViewById(R.id.roll_up); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    mAuth = FirebaseAuth.getInstance(); 

    this.mrecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     int mLastFirstVisibleItem = 0; 

     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      final int currentFirstVisibleItem = layout.findFirstVisibleItemPosition(); 

      if (currentFirstVisibleItem < this.mLastFirstVisibleItem) { 
       HomePage.this.getSupportActionBar().hide(); 
      } else if (currentFirstVisibleItem > this.mLastFirstVisibleItem) { 
       HomePage.this.getSupportActionBar().show(); 
      } 
      this.mLastFirstVisibleItem = currentFirstVisibleItem; 
     } 
    }); 

} 

    private void sentToStart() { 
    Intent intent = new Intent(HomePage.this, LoginPage.class); 
    startActivity(intent); 
    finish(); 
} 
@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 
    getMenuInflater().inflate(R.menu.menu_home_page, menu); 
    return true; 
} 
@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    super.onOptionsItemSelected(item); 
    int id = item.getItemId(); 

    if (id == R.id.action_settings){ 
     Intent intentSettings = new Intent(HomePage.this,settings.class); 
     startActivity(intentSettings); 
     LinearLayoutManager layoutManager = ((LinearLayoutManager) mrecyclerView.getLayoutManager()); 
     recyclerPos = layoutManager.findFirstVisibleItemPosition(); 
    } 
    if (id == R.id.roll_up){ 
     LinearLayoutManager layoutManagerroll = ((LinearLayoutManager) mrecyclerView.getLayoutManager()); 
     recyclerPos = layoutManagerroll.findFirstVisibleItemPosition(); 
     layoutManagerroll.scrollToPositionWithOffset(0,0); 

    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Diese Frage wurde bereits oft gefragt. –

+0

@ H.Brooks können Sie einige verweisen, ich habe viele versucht, aber sie haben nicht funktioniert für mich, und ich war nicht in der Lage, die richtige Antwort zu erhalten –

+0

https://StackOverflow.com/q/32159724/5550161 –

Antwort

0

Das Problem ist, dass Ihre Position falsch ist, da Sie die blättern wollen oben, das ist Element bei 0 Position, die Sie haben Tun Sie diesmRecyclerView.smoothScrollToPosition(0); Nicht dasmrecyclerView.smoothScrollToPosition(recyclerPos.getItemCount()-1);.
wie Sie scrollen bis zum letzten Element. , wo die Position ist falsch

auch zu ein Element an einer bestimmten Position Verwendung hinzufügen, um diesesaddItemAtPosition() and don't callnotifyDataSetChanged() keine Notwendigkeit, die gesamte Liste der inversen wie Sie erwähnt haben.

Verwandte Themen