如何保持 FirebaseRecyclerAdapter 的滚动位置

RAH*_*DEY 5 android firebase android-recyclerview firebaseui

FirebaseRecyclerAdapter当我从另一个活动返回到同一个活动时,我试图保持我的滚动位置。

这是我的功能,它设置 FirebaseRecyclerAdapter

public void setTheScreen(){
   FirebaseRecyclerAdapter<Post,PostViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post,PostViewHolder>(
           Post.class,
           R.layout.post_display_blueprint,
           PostViewHolder.class,
           postsNode
   ) {
       @Override
       public void onDataChanged() {
           if(dialog != null && dialog.isShowing()){
               dialog.dismiss();
           }
       }

       @Override
       protected void populateViewHolder(final PostViewHolder viewHolder, Post model, int position) {
           final String key = getRef(position).getKey();
           mRefPosts = FirebaseDatabase.getInstance().getReference().child("posts").child(key);
           mLoveNode = mRef.child("loves");
           mRefLoves = mRef.child("loves").child(key);
           viewHolder.setTitle(model.getTitle());
           viewHolder.setLoves(mRefLoves);
           viewHolder.setLoveButton(Uid,key);
           viewHolder.setImage(getApplicationContext(),model.getImageUrl());


           mRefPosts.addValueEventListener(new ValueEventListener() {
               @Override
               public void onDataChange(DataSnapshot dataSnapshot) {

                   String isAnonymous = dataSnapshot.child("anonymous").getValue(String.class);
                   if (isAnonymous != null && isAnonymous.equals("true")) {
                       viewHolder.anonymousButton.setVisibility(View.VISIBLE);
                   }

               }
               @Override
               public void onCancelled(DatabaseError databaseError) {

               }
           });


            viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Intent intent = new Intent(MainActivity.this,PostDisplayPageActivity.class);
                    intent.putExtra("Key",key);
                    startActivity(intent);

                }
            });
       }
   };
   mRecyclerView.setAdapter(firebaseRecyclerAdapter);
    firebaseRecyclerAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

}

通过单击适配器创建的任何视图,我将从我的MainActivity转到一个名为PostDisplayPageActivity的新活动,然后按下我正在完成PostDisplayPageActivity并返回MainActivity

当我回到我的 MainActivity 时,列表从 0 位置开始

我在 onPause 和 onResume 方法中使用了以下代码,但它不起作用。

 @Override
protected void onPause() {
    super.onPause();

    currentVisiblePosition = ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
    Toast.makeText(MainActivity.this,String.valueOf(currentVisiblePosition),Toast.LENGTH_SHORT).show();

}

@Override
protected void onResume() {
    super.onResume();

    setTheScreen();
    mRecyclerView.getLayoutManager().scrollToPosition(currentVisiblePosition);
    Toast.makeText(MainActivity.this,String.valueOf(currentVisiblePosition),Toast.LENGTH_SHORT).show();
    currentVisiblePosition = 0;


}
Run Code Online (Sandbox Code Playgroud)

从那两个Toasts我得到正确的位置,但视图总是从位置 0 开始。

对于我,RecyclerView我使用的LinearLayoutManagermRecyclerView.setLayoutManager(mLinearLayoutManager);

有人请告诉我我做错了什么或建议我一种不同的方法来做到这一点。

小智 2

我用一个更简单的解决方案解决了我的问题。我刚刚调用了adapter.startListening(); 在onViewCreated()而不是onStart中调用adapter.stopListening(); 在 onDestroyView() 而不是 onStop() 中,这阻止了从下一个活动返回时重新生成整个列表,从而保留了之前的滚动位置。