recyclerview Нет прилагаемого адаптера; пропускающий макет

241

Просто реализовано RecyclerViewв моем коде, замена ListView.

Все отлично работает Данные отображаются.

Но сообщения об ошибках регистрируются:

15:25:53.476 E/RecyclerView: No adapter attached; skipping layout

15:25:53.655 E/RecyclerView: No adapter attached; skipping layout

для следующего кода:

ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

Как вы видите, я подключил адаптер для RecyclerView. Так почему я продолжаю получать эту ошибку?

Я читал другие вопросы, связанные с той же проблемой, но ни один из них не помог.

equitharn
источник
художники пусты? что происходит, вы переключаете setAdapter и setLayoutManager?
Blackbelt
Вы должны использовать RecyclerView.Adapter
Octopus38
12
Вы можете увидеть это, если не инициализируете программу повторного просмотра, как только она прикреплена к окну.
2015 г.
1
@yigit Я жду дооснащения, чтобы загрузить данные, и после того, как это закончено, данный код запускается!
equitharn
3
Насколько серьезна эта ошибка? Можно ли это игнорировать? В любом случае я использую setAdapter (null), чтобы избежать ошибки.
priyankvex

Ответы:

243

Можете ли вы убедиться, что вы вызываете эти операторы из «основного» потока (например, внутри onCreate()метода). Как только я вызываю те же утверждения из «отложенного» метода. В моем случае ResultCallbackя получаю то же сообщение.

По моему Fragment, вызов кода ниже изнутри ResultCallbackметода производит то же самое сообщение. После перемещения кода в onConnected()метод моего приложения сообщение пропало ...

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );
Питер
источник
9
Но мне нужно сначала загрузить данные, а затем отобразить!
Equitharn
93
Просто сначала установите пустой адаптер, обновите его, как только у вас появятся данные (это то, что у меня работает).
Питер
3
Вот что предложил Йигит!
Equitharn
13
@equitharn Сначала вы должны установить пустой адаптер, а затем загрузить данные, вызвать mAdapter.notifyDataSetChanged (), который работает для меня.
DomonLee
2
Это решение не помогает мне. На самом деле никакое решение в этой теме не помогает мне. Может кто - то пожалуйста , посмотрите в моем случае здесь
Pulak
41

Я получал те же два сообщения об ошибках, пока не исправил две вещи в своем коде:

(1) По умолчанию при реализации методов в RecyclerView.Adapterнем генерируется:

@Override
public int getItemCount() {
    return 0;
}

Убедитесь, что вы обновили свой код, чтобы он сказал:

@Override
public int getItemCount() {
    return artists.size();
}

Очевидно, что если у вас есть ноль предметов, то вы получите ноль вещей, отображаемых на экране.

(2) Я не делал этого, как показано в верхнем ответе: CardView layout_width = "match_parent" не соответствует родительской ширине RecyclerView

//correct
LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_listitem, parent, false);

//incorrect (what I had)
LayoutInflater.from(parent.getContext())
        .inflate(R.layout.card_listitem,null);

(3) РЕДАКТИРОВАТЬ: БОНУС: Также убедитесь, что вы настроили RecyclerViewтак:

<android.support.v7.widget.RecyclerView
    android:id="@+id/RecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

Не так:

<view
    android:id="@+id/RecyclerView"
    class="android.support.v7.widget.RecyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Я видел некоторые учебники, использующие последний метод. Хотя это работает, я думаю, что это тоже генерирует эту ошибку.

Микро
источник
1
мой getItemCount () выглядит так public int getItemCount() { return artists == null ? 0 : artists.size(); }и LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
equitharn
это работает для меня: @Override public int getItemCount () {return artist.size (); }
AstonCheah
4
О Боже. В тот момент, когда вы возвращаетесь в SO и видите ответ, за который вы уже проголосовали, и понимаете, что вы делаете ту же самую глупость. Еще раз спасибо @Micro.
androidevil
20

У меня такая же ситуация с вами, с дисплеем все в порядке, но в локации появляется ошибка. Вот мое решение: (1) Инициализировать RecyclerView и адаптер привязки ON CREATE ()

RecyclerView mRecycler = (RecyclerView) this.findViewById(R.id.yourid);
mRecycler.setAdapter(adapter);

(2) вызвать notifyDataStateChanged, когда вы получите данные

adapter.notifyDataStateChanged();

В исходном коде recyclerView есть другой поток для проверки состояния данных.

public RecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.mObserver = new RecyclerView.RecyclerViewDataObserver(null);
    this.mRecycler = new RecyclerView.Recycler();
    this.mUpdateChildViewsRunnable = new Runnable() {
        public void run() {
            if(RecyclerView.this.mFirstLayoutComplete) {
                if(RecyclerView.this.mDataSetHasChangedAfterLayout) {
                    TraceCompat.beginSection("RV FullInvalidate");
                    RecyclerView.this.dispatchLayout();
                    TraceCompat.endSection();
                } else if(RecyclerView.this.mAdapterHelper.hasPendingUpdates()) {
                    TraceCompat.beginSection("RV PartialInvalidate");
                    RecyclerView.this.eatRequestLayout();
                    RecyclerView.this.mAdapterHelper.preProcess();
                    if(!RecyclerView.this.mLayoutRequestEaten) {
                        RecyclerView.this.rebindUpdatedViewHolders();
                    }

                    RecyclerView.this.resumeRequestLayout(true);
                    TraceCompat.endSection();
                }

            }
        }
    };

В dispatchLayout () мы можем найти ошибку:

void dispatchLayout() {
    if(this.mAdapter == null) {
        Log.e("RecyclerView", "No adapter attached; skipping layout");
    } else if(this.mLayout == null) {
        Log.e("RecyclerView", "No layout manager attached; skipping layout");
    } else {
Кит Гонг
источник
11

У меня есть эта проблема, несколько раз проблема recycleView положить в ScrollView объект

После проверки реализации причина, как представляется, заключается в следующем. Если RecyclerView помещается в ScrollView, то во время шага меры его высота не указывается (поскольку ScrollView допускает любую высоту) и, в результате, становится равной минимальной высоте (согласно реализации), которая, по-видимому, равна нулю.

У вас есть несколько вариантов исправить это:

  1. Установите определенную высоту для RecyclerView
  2. Установите для ScrollView.fillViewport значение true
  3. Или оставьте RecyclerView вне ScrollView. На мой взгляд, это лучший вариант на сегодняшний день. Если высота RecyclerView не ограничена - как в случае с ScrollView - тогда все виды Адаптера имеют достаточно места по вертикали и создаются сразу. Больше нет рециркуляции представления, которое как бы нарушает цель RecyclerView.

(Можно следить android.support.v4.widget.NestedScrollViewтакже)

FxRi4
источник
установка ScrollView.fillViewport истины решить мою проблему, спасибо кучи
Эман
10

1) Создать ViewHolder , который ничего не делает :)

// SampleHolder.java
public class SampleHolder extends RecyclerView.ViewHolder {
    public SampleHolder(View itemView) {
        super(itemView);
    }
}

2) Снова создайте RecyclerView , который ничего не делает :)

// SampleRecycler.java
public class SampleRecycler extends RecyclerView.Adapter<SampleHolder> {
    @Override
    public SampleHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(SampleHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

3) Теперь, когда ваш настоящий переработчик не готов, просто используйте образец, как показано ниже.

RecyclerView myRecycler = (RecyclerView) findViewById(R.id.recycler_id);
myRecycler.setLayoutManager(new LinearLayoutManager(this));
myRecycler.setAdapter(new SampleRecycler());

Это не лучшее решение, но оно работает! Надеюсь, это полезно.

Мадан Сапкота
источник
Привет, пожалуйста, у меня та же ошибка, и я не знаю, где я должен проверить, готов ли переработчик, чтобы пропустить пустой адаптер) и где я могу проверить, готов ли переработчик (передать адаптер с данными)
Джеймс
Это здорово, вот суть стиля drag'n drop gist.github.com/anonymous/bcf027945f08f40601090c55d6048e21
nmu
9

Это происходит, когда вы не устанавливаете адаптер на этапе создания:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    ....
}

public void onResume() {
    super.onResume();
    mRecyclerView.setAdapter(mAdapter);
    ....
}

Просто перенесите настройку адаптера в onCreate с пустыми данными и, когда у вас есть вызов данных:

mAdapter.notifyDataSetChanged();
Питер Файл
источник
убедитесь, что вы устанавливаете данные в конструкторе customadapter в методе onCreate
Мохит Сингх
4

Проверьте, не пропустили ли вы вызов этого метода в вашем адаптере

@Override
public int getItemCount() {
    return list.size();
}
Шаббир Ахмед
источник
3

Убедитесь, что вы установили менеджер макета для вашего RecyclerView:

mRecyclerView.setLayoutManager(new LinearLayoutManager(context));

Вместо этого LinearLayoutManagerвы также можете использовать другие менеджеры по расположению.

Sumit Jha
источник
3

У меня была та же ошибка, я исправил это, делая это, если вы ждете данных, таких как я, используя модификацию или что-то подобное

Поставить перед созданием

private ArtistArrayAdapter adapter;
private RecyclerView recyclerView;

Положите их в свой Oncreate

 recyclerView = (RecyclerView) findViewById(R.id.cardList);
 recyclerView.setHasFixedSize(true);
 recyclerView.setLayoutManager(new LinearLayoutManager(this));
 adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
 recyclerView.setAdapter(adapter);

Когда вы получаете данные положить

adapter = new ArtistArrayAdapter( artists , R.layout.list_item ,getApplicationContext());
recyclerView.setAdapter(adapter);

Теперь перейдите в ваш класс ArtistArrayAdapter и сделайте следующее: если ваш массив пуст или равен нулю, GetItemCount вернет 0, если нет, то размер массива художников будет равен

@Override
public int getItemCount() {

    int a ;

    if(artists != null && !artists.isEmpty()) {

        a = artists.size();
    }
    else {

        a = 0;

     }

   return a;
}
user3277530
источник
3

Эти строки должны быть в OnCreate:

mmAdapter = new Adapter(msgList);
mrecyclerView.setAdapter(mmAdapter);
Малликарджун Додмани
источник
2

Это происходит потому, что фактический раздутый макет отличается от того, на который вы ссылались при поиске recyclerView. По умолчанию при создании фрагмента метод onCreateView выглядит следующим образом: return inflater.inflate(R.layout.<related layout>,container.false);

Вместо этого отдельно создайте представление и используйте его для обращения к recyclerView. View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;

Пратик Агарвал
источник
2

Сначала инициализируйте адаптер

public void initializeComments(){
    comments = new ArrayList<>();

    comments_myRecyclerView = (RecyclerView) findViewById(R.id.comments_recycler);
    comments_mLayoutManager = new LinearLayoutManager(myContext);
    comments_myRecyclerView.setLayoutManager(comments_mLayoutManager);

    updateComments();
    getCommentsData();

}

public void updateComments(){

    comments_mAdapter = new CommentsAdapter(comments, myContext);
    comments_myRecyclerView.setAdapter(comments_mAdapter);
}

Когда в наборе данных есть изменения, просто вызовите метод updateComments.

Роджер
источник
2

Для тех, кто использует RecyclerViewвнутри фрагмента и раздувает его из других представлений: при раздувании всего представления фрагмента, убедитесь, что вы связываетеRecyclerView его с корневым представлением.

Я правильно подключался и делал все для адаптера, но я никогда не делал привязку. Этот ответ на @Prateek Агарвал имеет все это для меня, но здесь более разработки.

Котлин

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    val rootView =  inflater?.inflate(R.layout.fragment_layout, container, false)
    recyclerView = rootView?.findViewById(R.id.recycler_view_id)
    // rest of my stuff
    recyclerView?.setHasFixedSize(true)
    recyclerView?.layoutManager = viewManager
    recyclerView?.adapter = viewAdapter
    // return the root view
    return rootView
}

Ява

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View rootView= inflater.inflate(R.layout.fragment_layout,container,false);
    recyclerview= rootView.findViewById(R.id.recycler_view_id);
    return rootView;
}
Н. Осил
источник
1
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

Просто замените приведенный выше код этим, и он должен работать. То, что вы сделали неправильно, вы называли setAdapter (адаптер) перед вызовом менеджера по расположению.

Прадип Богати
источник
1

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

Решение: Скопируйте все коды старого макета и вставьте в макет v 21

Викаш Шарма
источник
1

В моем случае я устанавливал адаптер внутри onLocationChanged()обратного вызова И отлаживал в эмуляторе. Так как он не обнаружил изменение местоположения, он никогда не срабатывал. Когда я установил их вручную в расширенных элементах управления эмулятора, все заработало как положено.

saiyancoder
источник
1

Я решил эту ошибку. Вам просто нужно добавить менеджер раскладки и добавить пустой адаптер.

Понравился этот код:

myRecyclerView.setLayoutManager(...//your layout manager);
        myRecyclerView.setAdapter(new RecyclerView.Adapter() {
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return null;
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

            }

            @Override
            public int getItemCount() {
                return 0;
            }
        });
//other code's 
// and for change you can use if(mrecyclerview.getadapter != speacialadapter){
//replice your adapter
//}
Мехди Джанбарари
источник
1
я делаю это для начинающих пользователей
Мехди Джанбарари
1

Просто добавьте следующее RecyclerView

app:layoutManager="android.support.v7.widget.LinearLayoutManager"

Пример:

   <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:layout_constraintBottom_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </android.support.v7.widget.RecyclerView>
Алан Дип
источник
1

У меня была эта ошибка, и я некоторое время пытался ее исправить, пока не нашел решение.

Я создал закрытый метод buildRecyclerView и дважды вызывал его, сначала в onCreateView, а затем после обратного вызова (при котором я получаю данные из API). Это мой метод buildRecyclerView в моем фрагменте:

private void buildRecyclerView(View v) {
        mRecyclerView = v.findViewById(R.id.recycler_view_loan);
        mLayoutManager = new LinearLayoutManager(getActivity());
        ((LinearLayoutManager) mLayoutManager).setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mAdapter = new LoanAdapter(mExampleList);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
}

Кроме того, мне нужно изменить метод get-Item-Count в моем адаптере, потому что при On-Create-View список пуст, и он из-за ошибки. Итак, мой get-Item-Count следующий:

@Override
    public int getItemCount() {
        try {
            return mLoanList.size();
        } catch (Exception ex){return 0;}

    }
Зик
источник
0

В моей ситуации это был забытый компонент, который находится в классе ViewHolder, но его не было в файле макета.

lomec
источник
0

У меня была та же проблема, и я понял, что настраивал оба LayoutManage r и адаптер после получения данных из моего источника вместо того, чтобы установить два в методе onCreate .

salesAdapter = new SalesAdapter(this,ordersList);
        salesView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        salesView.setAdapter(salesAdapter);

Затем уведомил адаптер об изменении данных

               //get the Orders
                Orders orders;
                JSONArray ordersArray = jObj.getJSONArray("orders");
                    for (int i = 0; i < ordersArray.length() ; i++) {
                        JSONObject orderItem = ordersArray.getJSONObject(i);
                        //populate the Order model

                        orders = new Orders(
                                orderItem.getString("order_id"),
                                orderItem.getString("customer"),
                                orderItem.getString("date_added"),
                                orderItem.getString("total"));
                        ordersList.add(i,orders);
                        salesAdapter.notifyDataSetChanged();
                    }
ovicko
источник
0

Эта проблема заключается в том, что вы не добавляете ни одного LayoutManagerдля своего RecyclerView.

Другая причина в том, что вы вызываете этот код в NonUIThread. Обязательно вызовите этот вызов в UIThread.

Решение только нужно добавить LayoutManagerдля RecyclerViewперед вами setAdapterв UI Thread.

recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
Халид Таха
источник
Если вам нужно отложить настройку LayoutManager, вы должны сделать это с помощью метода обратного вызова: recyclerView.post (() -> {recyclerView.setLayoutManager (mGridLayoutManager); recyclerView.addItemDecoration (new ItemOffsetDecoration (itemGap));});
ievgen
0

Моя проблема была в том, что мой вид переработчика выглядел так

        <android.support.v7.widget.RecyclerView
        android:id="@+id/chatview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">
    </android.support.v7.widget.RecyclerView>

Когда это должно было выглядеть так

       <android.support.v7.widget.RecyclerView
        android:id="@+id/chatview"
        android:layout_width="395dp"
        android:layout_height="525dp"
        android:layout_marginTop="52dp"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="8dp"></android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
Кингсли Митчелл
источник
0

RecyclerViewНапример MyRecyclerViewAdapter, в своем классе адаптера создайте конструктор со следующими параметрами.

MyRecyclerViewAdapter(Context context, List<String> data) {
    this.mInflater = LayoutInflater.from(context); // <-- This is the line most people include me miss
    this.mData = data;
}

mDataэто данные, которые вы передадите в адаптер. Это необязательно, если у вас нет данных для передачи. mInflaterэто LayoutInflaterобъект, который вы создали, и вы используете вOnCreateViewHolder функции адаптера.

После этого вы присоединяете адаптер в MainActivity или куда хотите в главном / пользовательском интерфейсе, как

MyRecyclerViewAdapter recyclerAdapter;
OurDataStuff mData;

    ....
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Like this:

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerAdapter = new RecyclerAdapter(this, mData); //this, is the context. mData is the data you want to pass if you have any
        recyclerView.setAdapter(recyclerAdapter);
    }
   ....
Нил Агарвал
источник
0

Решается путем установки инициализированного пустого списка и адаптера внизу и вызова notifyDataSetChanged при получении результатов.

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    recyclerviewItems.setLayoutManager(linearLayoutManager);
    someAdapter = new SomeAdapter(getContext(),feedList);
    recyclerviewItems.setAdapter(someAdapter);
Табраиз Малик
источник
0

Я потерял 16 минут своей жизни из-за этой проблемы, поэтому я просто признаю эту невероятно смущающую ошибку, которую я совершил - я использую Butterknife и связываю представление в onCreateView в этом фрагменте.

Потребовалось много времени, чтобы понять, почему у меня не было менеджера компоновки - но очевидно, что представления внедряются, поэтому они на самом деле не будут нулевыми, поэтому переработчик никогда не будет нулевым ... упс!

@BindView(R.id.recycler_view)
RecyclerView recyclerView;

    @Override
public View onCreateView(......) {
    View v = ...;
    ButterKnife.bind(this, v);
    setUpRecycler()
 }

public void setUpRecycler(Data data)
   if (recyclerView == null) {
 /*very silly because this will never happen*/
       LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
       //more setup
       //...
    }
    recyclerView.setAdapter(new XAdapter(data));
}

Если вы получаете такую ​​проблему, проследите свое мнение и используйте что-то вроде uiautomatorviewer

Saik Caskey
источник
0

Немного ответа, но у меня возникла та же проблема, даже с правильным кодом. Иногда это просто самая простая из марок. В этом случае ошибка ОП также может отсутствовать <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />в Манифесте, который воспроизводит ту же ошибку.

SpicyWeenie
источник
0

В моем случае это произошло потому, что я встроил RecyclerView в LinearLayout.

Ранее у меня был файл макета, содержащий только один корневой RecyclerView следующим образом

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:listitem="@layout/fragment_products"

    android:name="Products.ProductsFragment"
    app:layoutManager="LinearLayoutManager"
    tools:context=".Products.ProductsFragment"

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"/>

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

SoliQuiD
источник
0

Добавление еще одного ответа, так как я наткнулся на эту тему, погуглив ошибку. Я пытался инициализировать, PreferenceFragmentCompatно я забыл раздуть предпочтение XML onCreatePreferencesследующим образом:

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val inflater = LayoutInflater.from(context)
        inflater.inflate(R.layout.fragment_settings, null)
    }

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        // Missing this line here:
        //   setPreferencesFromResource(R.xml.settings, rootKey)
    }
}

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

aschmied
источник
0

// Это происходит, когда вы не устанавливаете адаптер на этапе создания: вызовите notifyDataSetChanged (), когда ответ API получает свою работу

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);


        magazineAdapter = new MagazineAdapter(getContext(), null, this );
        newClipRecyclerView.setAdapter(magazineAdapter);
        magazineAdapter.notifyDataSetChanged();

       APICall();
}

public void APICall() {
    if(Response.isSuccessfull()){
    mRecyclerView.setAdapter(mAdapter);
   }
}
Just move setting the adapter into onCreate with an empty data and when you have the data call:

mAdapter.notifyDataSetChanged();
Кешав Гера
источник