Ich habe eine Liste mit Elementen, wobei jeder Eintrag einen Namen und eine Löschschaltfläche hat.FirebaseRecyclerAdapter aktualisiert Artikeleinträge nicht, wenn Daten gelöscht wurden
Mein populateViewHolder Methode
@Override
protected void populateViewHolder(SubChannelViewHolder viewHolder, final SubChannel model, final int position) {
//passing a clickListener to viewHolder,viewHolder in turn decides to which view it should assign this clickListener.
viewHolder.bindToSubChannel(model, new View.OnClickListener() {
@Override
public void onClick(View view) {
String key= getRef(position).getKey();//Getting the key of the subChannel item
Map<String,Object> childUpdates=new HashMap<>();
//The positions where the subChannel was stored
childUpdates.put("/channels-subChannels/"+mChannelKey+"/" +key+"/subChannelName/",null);
childUpdates.put("/channels/" + mChannelKey+"/subChannels/"+key+"/subChannelName/", null);
childUpdates.put("/user-channels/" +getUid()+"/"+ mChannelKey+"/subChannels/"+key+"/subChannelName/", null);
//setting values at these location as null thereby doing batch deleting.
mDatabase.updateChildren(childUpdates);
}
});
}
Mein ViewHolder: in meinem ViewHolder Ich habe eine bindToSubChannel Methode, die das Objekt durch die FirebaseRecyclerAdapter abgerufen nimmt & die clicklistener auf dem löschen Image setzt.
public class SubChannelViewHolder extends RecyclerView.ViewHolder {
private TextView subChannelNameTextView;
private ImageView removeImageView;
public SubChannelViewHolder(View itemView) {
super(itemView);
subChannelNameTextView=(TextView)itemView.findViewById(R.id.subChannel_name_text_view);
removeImageView =(ImageView)itemView.findViewById(R.id.remove_image_view);
}
public void bindToSubChannel(SubChannel subChannel,View.OnClickListener RemoveImageClickListener){
subChannelNameTextView.setText(subChannel.getSubChannelName());
removeImageView.setOnClickListener(RemoveImageClickListener);
}
}
ich die folgende IndexOutOfBoundsException in dieser Zeile:
String key= getRef(position).getKey();
die Ausnahme ausgelöst wird, wenn zu sagen hatte ich 6 Elemente in der Liste (1,2,3,4,5,6) & Ich habe 1,2 gelöscht.
Dann, wenn ich für 6 drücken löschen Sie den Index der Adapter für Artikel abruft 6 ist das Original-6, aber aber die Größe des Adapters bis 4 (nach dem Löschen von 1,2)
E/AndroidRuntime: FATAL EXCEPTION: main
Process: in.arnavvohra.arry2, PID: 1493
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
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:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getRef(FirebaseRecyclerAdapter.java:150)
at in.arnavvohra.arry2.EditSubChannelsActivity$2$1.onClick(EditSubChannelsActivity.java:67)
at android.view.View.performClick(View.java:5076)
at android.view.View$PerformClick.run(View.java:20279)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5930)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
hatte sich verändert Wie Soll ich dieses Problem lösen?
Sie sollen nicht nennen müssen 'notifyItemRemoved()' oder ähnliches auf dem Adapter. Löschen Sie einfach die Elemente aus der Datenbank und der Rest geschieht automatisch. –
Anfangs hatte ich sie entfernt, aber auf der Suche nach SO fand ich, dass sie hinzugefügt werden sollten. Wie auch immer, mein Fehler bleibt auch, wenn ich sie entferne. –
@FrankvanPuffelen Kannst du oder jemand in deinem Team helfen? –