java - 如何在删除 Firebase 中的行后刷新 Recyclerview 适配器中的数据

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

我使用带有数据列表和按钮的 cardivew 的 Recycleview 来删除任何值。当我单击按钮时,它确实从 firebase 数据库中删除了值,但文本和行仍然保留在应用程序的适配器中,但只有当我返回并重新打开关闭 Activity 时,行才为空。

我每次都在两个地方使用下面的方法(我也在代码中显示)但是它不起作用

                         bookslist.remove(position);   
                         notifyDataSetChanged();       

如何在点击删除按钮时立即更新回收 View

这是我的代码

public class SubjectBooksAdapter extends RecyclerView.Adapter<SubjectBooksAdapter.MyViewHolder> {
    ArrayList<Books> bookslist;

    FirebaseDatabase database;
    DatabaseReference dbreference;


    public SubjectBooksAdapter(ArrayList<Books> bookslist){
        this.bookslist = bookslist;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout,parent,false);
        return new MyViewHolder(v);



    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

   
          Button mSolved;
 




        MyViewHolder(final View itemView) {
            super(itemView);
 
            database = FirebaseDatabase.getInstance();
            dbreference = database.getReference("roomrequest");
             dbreference.keepSynced(true);

            mSolved = (Button) itemView.findViewById(R.id.book_solved);
            mSolved.setTransformationMethod(null);


            fauth = FirebaseAuth.getInstance();



        }
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        database = FirebaseDatabase.getInstance();
        dbreference = database.getReference("roomrequest");
        
   
        holder.mSolved.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               



                    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
                    DatabaseReference classicalMechanicsRef = rootRef.child("roomrequest").child("request").child(g.getRequestid());
                    ValueEventListener valueEventListener = new ValueEventListener() {

                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            dataSnapshot.getRef().removeValue();
                             bookslist.remove(position);   \\ Solution One
                             notifyDataSetChanged();       \\ Solution One
                    
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    };
                    classicalMechanicsRef.addListenerForSingleValueEvent(valueEventListener);
                             bookslist.remove(position);   \\ Solution Two
                             notifyDataSetChanged();       \\ Solution Two
                    
                }
            
        });



 }



    @Override
    public int getItemCount() {
        return bookslist.size();
    }
}

最佳答案

使用 notifyItemRemoved(position);


例如-

bookslist.remove(position);
notifyItemRemoved(position);

关于java - 如何在删除 Firebase 中的行后刷新 Recyclerview 适配器中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158399/

相关文章:

android - 识别用户上传的 Firebase 存储

android - Firebase - 在 Android 中检索数据

ios - tableView 不刷新

java 初学者 : which is preferred when class has arraylist of arraylist (clone(), 不可修改列表,自定义深度复制)

android - Shield 平板电脑中的 IMEI 在 Android Studio 上不可用

java - CardView 滑动操作 - Material - Android Java

在名称中使用时间戳时,Android Studio 无法在构建后启动应用程序

android - 无法实例化接收器 com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver

java - Spring @autowired 注释与 java TimerTask 不起作用

java - : No suitable driver found for jdbc:mysql://localhost:3306/sampledb如何解决