У меня есть recyclerview, который содержит данные для сигнализации:Обновление данных (ArrayList) для recyclerview из аа красть помощника
Я приношу в данных в основной фрагмент на CreateView так:
// Data
alarms = AlarmCollection.getAlarms(getActivity());
// Adapter
adapter = new AlarmsAdapter(getActivity(), alarms);
rv.setAdapter(adapter);
Я также добавить помощника салфетки для обработки, когда пользователь пойло (отбросов) сигнал тревоги, как это:
// Swipe helper
ItemTouchHelper.Callback callback = new SwipeHelper(adapter);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(rv);
и обновлять данные (ArrayList) для представления ресайклера у меня есть функция в mainfragm лор для обновления, как это:
public void update(){
alarms.clear();
alarms.addAll(AlarmCollection.getAlarms(getActivity()));
adapter.notifyDataSetChanged();
}
Это обновление функция отлично работает, когда вызывается из основного фрагмента сигнала тревоги, так что я знаю, что функция нормально.
Моей проблема заключается в том, что функция должна быть вызвана из класса красть хелпер, как это требуется, когда пользователь пойло сигнал тревоги:
Я пытался сделать статический массив сигналов тревоги, которые не работают получили нулевой указатель ,
Тогда я попытался вызвать функцию обновления от помощника красть, как это:
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
AlarmsFragment = new MainAlarmsFragment();
adapter.dismissAlarm(viewHolder.getAdapterPosition());
AlarmsFragment.update();
}
Но опять-таки я получаю исключение нулевого указателя.
Как обновить массив и вызвать notifydatas выбрано из класса помощников салфетки?
EDIT:
Это является помощником коромысло, где на прокатывается переопределяется (он находится в своем собственном файле класса):
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());
}
}
Это вызов функции смещать в адаптере, но не имеет ссылка на основной фрагмент сигнала тревоги, в котором создается Arraylist.
Это мой текущий конструктор для адаптера:
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;
}
Заранее спасибо за помощь
благодарит за ваш ответ. На swiped определяется в своем классе. Извините, если я не разместил достаточно информации. Я не вижу, как я могу использовать любое решение. Я отредактирую свой вопрос с большим количеством кода. –
Awesome Спасибо! Это сработало отлично, устраняя проблему. –