Невозможно вызвать метод из класса адаптера RecyclerView

Я создал recyclerView -

public class PlayerListRecyclerViewAdapter extends RecyclerView.Adapter<PlayerListRecyclerViewAdapter.ViewHolder>


 playerAdapter = new PlayerListRecyclerViewAdapter(this,cursor, playerDataSet);
        playerRecyclerView.setAdapter(playerAdapter);

Все работает нормально, но я создал следующий метод:

public void swapCursor(Cursor newCursor) {
    // Always close the previous mCursor first
    if (pCursor != null) pCursor.close();
    pCursor = newCursor;
    if (newCursor != null) {
        // Force the RecyclerView to refresh
        this.notifyDataSetChanged();
    }
}

Но когда я пытаюсь вызвать его из активности, связанной с адаптером, он не находит его:

 new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.RIGHT) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                //Do nothing, we are not moving anything
                //But maybe we can let the user arrange their list?
                return false;
            }

            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                long id = (long) viewHolder.itemView.getTag();
                removePlayer(id);
                playerAdapter.swapCursor(getAllPlayers());

            }
        }).attachToRecyclerView(playerRecyclerView);
    }

Курсор подкачки красный, и в адаптере отображается сообщение, что он никогда не использовался.

Я пытаюсь следить:

https://github.com/udacity/ud851-Exercises/blob/student/Lesson07-Waitlist/T07.05-Solution-AddGests/app/src/main/java/com/example/android/waitlist/GuestListAdapter.java

Но я не уверен, что мне не хватает? Все остальное работает нормально, свайпаю, детали загружаются. Все хорошо, просто вызов этого метода по какой-то причине не работает.

Вы должны опубликовать полный код адаптера и класса активности. Таким образом, можно указать правильный способ вызова метода.

Khemraj Sharma 30.04.2018 14:00
playerAdapter следует определять как PlayerListRecyclerViewAdapter playerAdapter; В отличие от RecyclerView.Adapter playerAdapter;.
ADM 30.04.2018 14:05

@ADM спасибо, это исправлено. Не могли бы вы опубликовать его как ответ, чтобы я мог отметить его правильным

user7221142 30.04.2018 14:10

Здесь он работает нормально, когда я пробовал ваш код swapCursor .. Можете ли вы отправить полный код активности, в которой вы его используете, а также адаптер? ..

Zainab Jamil 30.04.2018 14:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
66
2

Ответы 2

пожалуйста, убедитесь, что ваш адаптер плеера получает нулевое значение.

потому что доступ к методу swapCursor после определения объекта playeradapter.

if (playerAdapter!=null){
playerAdapter.swapCursor(getAllPlayers());     
}

Проверьте свой код для объявления playerAdapter. Это должно быть так: -

PlayerListRecyclerViewAdapter playerAdapter;

Вместо

RecyclerView.Adapter playerAdapter;

Другие вопросы по теме