【问题标题】:Scroll to the top of recyclerView in Android using a button使用按钮滚动到Android中recyclerView的顶部
【发布时间】:2017-10-15 17:27:52
【问题描述】:

我在我的应用程序中使用了 recyclerView 并想在其中添加一个 向上滚动到顶部按钮,我已在其中添加了按钮但无法添加当我单击按钮时,将我的 recyclerView 滚动到顶部,我还 反转 我的 RecyclerView 以便我添加的新帖子位于顶部而不是底部。请帮助我,非常感谢提前。我也使用了getPosition 方法,但这对我不起作用。

我正在使用 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);
}

【问题讨论】:

  • 这个问题已经被问过很多次了。
  • @H.Brooks 你能推荐一些吗,我尝试了很多,但它们对我不起作用,我无法得到正确的答案
  • @H.Brooks 我已经反转了 recyclerView,scrollToPositionWithOffset 将我带到页面底部,请帮忙
  • 好的,既然你一直在添加项目,你应该先得到项目的数量,然后你可以将scrollToPositionWithOffset的位置设置为项目的数量。

标签: android scroll android-recyclerview smooth-scrolling


【解决方案1】:

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

还可以在特定位置添加元素,使用 this addItemAtPosition() and don't callnotifyDataSetChanged() 无需像您提到的那样反转整个列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多