2017-10-15 12 views
0

Je l'ai utilisé recyclerView dans ma demande et que vous voulez ajouter un défilement à bouton du haut en ce que j'ai ajouté le bouton mais ne pouvait pas être en mesure pour faire défiler mon recycleurView sur le dessus quand je clique sur le bouton, aussi j'ai inversé mon RecyclerView de sorte que le nouveau poste que j'ajoute dedans ne vient pas en bas. s'il vous plaît aidez-moi, merci beaucoup d'avance. J'ai également utilisé la méthode getPosition mais cela n'a pas fonctionné pour moi.Faites défiler jusqu'au haut de recyclerView dans Android en utilisant un bouton

Je suis Android Studio

défilement code action de fichier de classe:

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

Cette question a été posée plusieurs fois auparavant. –

+0

@ H.Brooks pouvez-vous en référer, j'ai essayé beaucoup, mais ils ne fonctionnaient pas pour moi et je ne pouvais pas obtenir la bonne réponse –

+0

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

Répondre

0

Le problème est que votre position est mauvaise, puisque vous voulez faire défiler jusqu'à la top qui est l'élément à 0 position que vous devez Faîtes cecimRecyclerView.smoothScrollToPosition(0); NonmrecyclerView.smoothScrollToPosition(recyclerPos.getItemCount()-1);.
lorsque vous faites défiler jusqu'à un dernier élément. où la position est mauvaise

également à ajouter un élément à une utilisation de position particulière ceaddItemAtPosition() and don't callnotifyDataSetChanged() pas besoin d'inverser toute la liste comme vous l'avez mentionné.