2017-10-15 86 views
0

我用recyclerView在我的应用程序,并希望在添加向上滚动到顶部的按钮,我已经在里面添加的按钮,但也不能当我点击按钮滚动我的recyclerView时,我也有颠倒我的RecyclerView,以便我添加的新帖子出现在顶部而不是底部。请提前帮助我,非常感谢。我也使用getPosition方法,但这并不适合我。滚动到recyclerView在Android的顶部用一个按钮

我使用过Android Studio

滚动操作类文件代码:

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

此问题以前已被询问过很多次。 –

+0

@ H.Brooks你可以参考一些,我已经尝试了很多,但他们没有为我工作,我无法得到正确的答案 –

+0

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

回答

0

的问题是,你的立场是错误的,因为要滚动到顶部这是元素在0的位置,你必须这样做mRecyclerView.smoothScrollToPosition(0); 不是这个mrecyclerView.smoothScrollToPosition(recyclerPos.getItemCount()-1);
当你滚动到最后只有一个元素。 所在的方位不对

而且到在特定位置使用添加元素这个addItemAtPosition() and don't callnotifyDataSetChanged()无需逆整个列表像你提到的。

相关问题