【问题标题】:maintaining the position in recycler view after removing an item from firebase real time database not working从firebase实时数据库中删除项目后,在回收站视图中保持位置不起作用
【发布时间】:2021-04-09 05:54:12
【问题描述】:

我正在尝试从 firebase 实时数据库中删除一个项目。删除成功后回收站视图位置移动到底部。

如何阻止回收站视图位置移动到底部?

用于从 firebase 回收器视图中删除项目的代码 sn-p:

try {
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    Query applesQuery = ref.child("Chatsdata").orderByChild("messageid").equalTo(mMsgList.get(position1).getMessageID());
    applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            for (DataSnapshot appleSnapshot : dataSnapshot.getChildren())
            {
                appleSnapshot.getRef().removeValue();

                mMsgList.remove(position1);
                notifyItemRemoved(position1);
                Toast.makeText(mContext, "Deleted successfully", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("ERROR", "onCancelled", databaseError.toException());
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}

【问题讨论】:

    标签: android firebase firebase-realtime-database android-recyclerview


    【解决方案1】:

    要维护回收站视图的状态,您可以使用Parcelable。 请按照以下步骤实现此目的。 (1) 创建一个通用类(如果没有的话)和一个变量 postsRecyclerViewState

    import android.os.Parcelable;
    
    public class Common {
        public static Parcelable postsRecyclerViewState ;
    }
    

    (2) 将 onScrollListener 附加到你的 recyclerView

      recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                Common.postsRecyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
            }
        });
    

    (3) 当您将适配器设置为回收站视图时,请使用以下代码

     recyclerView.setAdapter(postsAdapter);
    
                   if (null != Common.postsRecyclerViewState)
                   {
                       recyclerView.getLayoutManager().onRestoreInstanceState(Common.postsRecyclerViewState);
                   }
    

    通过这种方式,您可以获得recycler视图的保留状态。 如果有任何不清楚的地方欢迎提问,如果对您有帮助,请将其标记为正确答案。

    【讨论】:

    • 删除后位置不动。但是在向上和向下滚动时,已删除的项目显示为覆盖。 :-(
    • 你能分享一些截图或任何参考,以便我更清楚地理解吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多