Ich habe einen recyclerview, die Daten für Alarme enthält:Aktualisierung der Daten (Arraylist) für recyclerview von aa Swipe Helfer
ich im Haupt Fragment auf Create wie dies in den Daten bringen:
// Data
alarms = AlarmCollection.getAlarms(getActivity());
// Adapter
adapter = new AlarmsAdapter(getActivity(), alarms);
rv.setAdapter(adapter);
ich füge auch einen Seitenhieb Helfer zu handhaben, wenn ein Benutzer klaut (verwirft) einen Alarm wie folgt aus:
// Swipe helper
ItemTouchHelper.Callback callback = new SwipeHelper(adapter);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(rv);
und die Daten (Arraylist) für die Recycler Ansicht ich eine Funktion in der mainfragm haben zu aktualisieren ent für wie diese Aktualisierung:
public void update(){
alarms.clear();
alarms.addAll(AlarmCollection.getAlarms(getActivity()));
adapter.notifyDataSetChanged();
}
Dieses Update-Funktion funktioniert gut, wenn von dem Hauptalarm-Fragmente genannt wird, damit ich die Funktion ist ok wissen.
Mein Problem ist, dass Funktion aus der Swipe-Helper-Klasse aufgerufen werden muss, wie es benötigt wird, wenn der Benutzer einen Alarm klaut aus:
ich die Alarme Array statisch zu machen versucht, die einen Null-Zeiger nicht bekam arbeiten .
Dann habe ich versucht, wie dies die Update-Funktion aus dem Swipe-Helfer Aufruf:
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
AlarmsFragment = new MainAlarmsFragment();
adapter.dismissAlarm(viewHolder.getAdapterPosition());
AlarmsFragment.update();
}
Aber wieder erhalte ich eine Null-Zeiger-Ausnahme.
Wie aktualisiere ich das Array und call notifydatasetchanged von der Swipe-Helper-Klasse?
EDIT:
Dies ist der Swipe-Helfer, wo die auf geklaut außer Kraft gesetzt werden (es ist in seiner eigenen Klasse-Datei):
public class SwipeHelper extends ItemTouchHelper.SimpleCallback {
AlarmsAdapter adapter;
public SwipeHelper(int dragDirs, int swipeDirs) {
super(dragDirs, swipeDirs);
}
public SwipeHelper(AlarmsAdapter adapter) {
super(ItemTouchHelper.UP | ItemTouchHelper.DOWN,ItemTouchHelper.RIGHT |ItemTouchHelper.LEFT);
this.adapter = adapter;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
adapter.dismissAlarm(viewHolder.getAdapterPosition());
}
}
Dies ist die Funktion im Adapter entlassen Aufruf hat aber keine Verweis auf das Hauptalarmfragment, in dem die Arraylist erstellt wird.
Dies ist mein aktueller Konstruktor für den Adapter:
public class AlarmsAdapter extends RecyclerView.Adapter<AlarmHolder>{
Context c;
ArrayList <Alarm> alarms;
ArrayList <Integer> alarmsIdsArray;
public AlarmsAdapter(Context c, ArrayList<Alarm> alarms) {
this.c = c;
this.alarms = alarms;
}
Vielen Dank im Voraus für Ihre Hilfe
danke für Ihre Antwort. On swiped ist in einer eigenen Klasse definiert. Tut mir leid, wenn ich nicht genug Informationen dort hingelegt habe. Ich sehe nicht, wie ich beide Lösungen verwenden kann. Ich werde meine Frage mit mehr Code bearbeiten. –
Super Danke! Es hat sofort funktioniert und das Problem behoben. –