Android Swipe Открыть и загрузить больше Нажмите: Причинение ошибки 'RecyclerView $ ViewHolder.itemView' для ссылки на пустой объект - PullRequest
0 голосов
/ 14 мая 2018

Мое приложение похоже на почтовый ящик 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;
        }
    };
...