删除项目时,Android studio recyclerview错误 - Firebase

时间:2018-03-14 04:22:45

标签: android firebase android-recyclerview

删除viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { firebaseRecyclerAdapter.getRef(position).removeValue(); firebaseRecyclerAdapter.notifyItemRemoved(position); dataBase.child(getRef(position).getKey().toString().trim()).child("usuario").removeValue(); } }); 中的所有项目时出错。当我删除一个特定项目时没问题,当我删除最后一个时出现错误(我的意思是,当我删除所有内容时)。所以这是我的代码

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: uyenterteinment.haynoche, PID: 7251
              java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
                  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                  at java.util.ArrayList.get(ArrayList.java:308)
                  at com.firebase.ui.database.FirebaseArray.getItem(FirebaseArray.java:50)
                  at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:155)
                  at uyenterteinment.haynoche.EventSingleActivity$3$3.onClick(EventSingleActivity.java:239)
                  at android.view.View.performClick(View.java:5698)
                  at android.view.View$PerformClick.run(View.java:22557)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:158)
                  at android.app.ActivityThread.main(ActivityThread.java:7231)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

所以错误是:

at uyenterteinment.haynoche.EventSingleActivity$3$3.onClick(EventSingleActivity.java:239)

在这里你可以看到,它是sais

firebaseRecyclerAdapter.getRef(position).removeValue();

这一行是:

ps -ef

4 个答案:

答案 0 :(得分:0)

点击firebaseRecyclerAdapter上的notifyDataSetChanged()

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    var index = position - 1;
                    firebaseRecyclerAdapter.getRef(index).removeValue();
                    firebaseRecyclerAdapter.notifyItemRemoved(position);
                    dataBase.child(getRef(position).getKey().toString().trim()).child("usuario").removeValue();
                    firebaseRecyclerAdapter.notifyDataSetChanged();
                }
            });

为了防止异常,只需从position中减去1,因为索引从零开始,这意味着第一个项目的索引为0。

答案 1 :(得分:0)

recyclerview移除项目后更新您的视图,删除项目后添加“notifyDataSetChanged()”。

答案 2 :(得分:0)

我认为这对你有用

viewHolder.getAdapterPosition()

点击项目

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            firebaseRecyclerAdapter.getRef(viewHolder.getAdapterPosition()).removeValue();
            dataBase.child(getRef(viewHolder.getAdapterPosition()).getKey().toString().trim()).child("usuario").removeValue();
            firebaseRecyclerAdapter.notifyItemRemoved(viewHolder.getAdapterPosition();
        }
    });

答案 3 :(得分:0)

从recyclerview中删除值后,立即从适配器调用 notifyDataSetChanged()以使用编辑后的数据刷新recyclelerview。因此,ArrayList的大小也将更新。

viewHolder.itemView.findViewById(R.id.rmvPerson).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  /*remove value*/
                notifyDataSetChanged();
            }
        });