Мое приложение похоже на почтовый ящик Gmail. Когда приложение открывается, я вызываю API, дающий ответ на сообщения за последние месяцы, в конце прокрутки есть кнопка «Загрузить больше», при нажатии на эту кнопку мы получаем полные сообщения, а также удаление функции в просмотре реселлера.
Ошибка возникает, когда я открываю свайп и нажимаю кнопку loadmore, вызывающую эту ошибку, свайп закрывается, проблем нет.
java.lang.NullPointerException: попытка чтения из поля 'android.view.View android.support.v7.widget.RecyclerView $ ViewHolder.itemView'
на нулевой ссылке на объект
notifications.SwipeHelper $ 2.onTouch (SwipeHelper.java:53)
на android.view.View.dispatchTouchEvent (View.java:11721)
notificationRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
notificationRecyclerView.setLayoutManager(mLayoutManager);
adapter = new ListAdapter(getActivity(), Models, ListFragment.this);
notificationRecyclerView.setAdapter(adapter);
SwipeHelper swipeHelper = new SwipeHelper(getActivity() ,notificationRecyclerView) {
@Override
public void instantiateUnderlayButton(RecyclerView.ViewHolder viewHolder, List<UnderlayButton> underlayButtons) {
underlayButtons.add(new SwipeHelper.UnderlayButton(
"Delete",
0,
Color.parseColor("#868686"),
new SwipeHelper.UnderlayButtonClickListener() {
@Override
public void onClick(int pos) {
}
}
));
}
};
}
SwipeHelper.Class
private View.OnTouchListener onTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e) {
if (swipedPos < 0) return false;
Point point = new Point((int) e.getRawX(), (int) e.getRawY());
RecyclerView.ViewHolder swipedViewHolder = recyclerView.findViewHolderForAdapterPosition(swipedPos);
View swipedItem = swipedViewHolder.itemView;
Rect rect = new Rect();
swipedItem.getGlobalVisibleRect(rect);
if (e.getAction() == MotionEvent.ACTION_DOWN || e.getAction() == MotionEvent.ACTION_UP ||e.getAction() == MotionEvent.ACTION_MOVE) {
if (rect.top < point.y && rect.bottom > point.y)
gestureDetector.onTouchEvent(e);
else {
recoverQueue.add(swipedPos);
swipedPos = -1;
recoverSwipedItem();
}
}
return false;
}
};