reciklierview Не приєднано адаптер; пропуск макета


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. То чому я продовжую отримувати цю помилку?

Я читав інші питання, пов'язані з тією ж проблемою, але жодне з них не допомагає.


чи художники порожні? що відбувається, коли ви перемикаєте setAdapter і setLayoutManager?
Блекбелт

Вам потрібно скористатися RecyclerView.Adapter
Octopus38

12
Ви можете бачити це, якщо ви не ініціалізуєте перегляд рециркулятора, як тільки він прикріплений до вікна.
yigit

1
@yigit Я чекаю на модернізацію для завантаження даних і після її завершення заданий код працює!
equitharn

3
Наскільки серйозна ця помилка? Чи можна це ігнорувати? У будь-якому випадку я використовую setAdapter (null), щоб уникнути помилки.
priyankvex

Відповіді:


243

Чи можете ви переконатися, що викликуєте ці твердження з "головного" потоку (наприклад, всередині onCreate()методу). Як тільки я називаю ті самі твердження із методу "затримки". У моєму випадку a ResultCallback, я отримую те саме повідомлення.

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

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );

9
Але мені потрібно спочатку завантажити дані, а потім відобразити!
equitharn

93
Просто встановіть спочатку порожній адаптер, оновіть його, як тільки у вас з’являться дані (це те, що працює для мене).
Пітер

3
Ось що запропонував yigit!
equitharn

13
@equitharn Спершу слід встановити порожній адаптер, а потім завантажувати дані, викликати mAdapter.notifyDataSetChanged (), який працює для мене.
DomonLee

2
Це рішення мені не допомагає. Насправді жодне рішення з цієї теми мені не допомагає. Може хтось, будь ласка,
загляне

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) редагувати: BONUS: також переконайтеся, що ви налаштували 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 arts.size (); }
AstonCheah

4
О, Боже. Того моменту, коли ти повернешся до ПС і побачиш відповідь, яку ти вже схвалив, і зрозумієш, що ти робиш ту саму дурню. Ще раз дякую @Micro
androidevil

20

У мене така ж ситуація з вами, дисплей у порядку, але помилка з’являється в локаті. Це моє рішення: (1) Ініціалізуйте адаптер RecyclerView & bind ON CREATE ()

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

(2) виклик notifyDataStateChanged при отриманні даних

adapter.notifyDataStateChanged();

У вихідному коді recilerView є інший потік для перевірки стану даних.

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)


встановлення 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 стиль падіння суть gist.github.com/anonymous/bcf027945f08f40601090c55d6048e21
НММИ

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
Mohit Singh

4

Перевірте, чи не пропустили ви закликати цей метод у своєму адаптері

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

3

Переконайтеся, що ви встановили менеджер макетів для свого RecyclerView:

mRecyclerView.setLayoutManager(new LinearLayoutManager(context));

Замість цього LinearLayoutManagerви можете використовувати й інших менеджерів макетів.


3

У мене була така ж помилка, яку я виправдав, роблячи це, якщо ви чекаєте таких даних, як я, використовуючи доопрацювання чи щось подібне

Покладіть перед Oncreate

private ArtistArrayAdapter adapter;
private RecyclerView recyclerView;

Покладіть їх у своє створення

 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;
}


2

Це відбувається тому, що фактично завищений макет відрізняється від того, на який ви посилаєтесь під час пошуку recilerView. За замовчуванням під час створення фрагмента метод onCreateView з'являється таким чином: return inflater.inflate(R.layout.<related layout>,container.false);

Замість цього окремо створіть подання та використовуйте його для посилання на recilerView 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 Agarwal має все для мене, але ось детальніше.

Котлін

    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
}

Java

  @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()зворотного виклику І налагодження в емуляторі. Оскільки він не виявив зміни місцезнаходження, він ніколи не запускався. Коли я встановив їх вручну в розширених елементах управління емулятора, він працював як слід.


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
я роблю це для початківців користувачів
mehdi janbarari

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 список є нульовим, і це через помилку. Отже, мій рахунок-кількість предметів такий:

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

    }

0

У моїй ситуації це був забутий компонент, який знаходиться у класі ViewHolder, але він не знаходився у файлі компонування


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();
                    }

0

Це питання тому, що ви не додаєте жодного LayoutManagerдля свого RecyclerView.

Ще одна причина тому, що ви викликаєте цей код у NonUIThread. Обов’язково зателефонуйте на цей дзвінок у програмі UIThread.

Рішення полягає лише в тому, що ви повинні додати LayoutManagerтему RecyclerViewдо того, як ви перейдете setAdapterдо потоку інтерфейсу користувача.

recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

Якщо вам потрібно затримати налаштування LayoutManager, вам слід зробити це за допомогою методу зворотного виклику: recilerView.post (() -> {recilerView.setLayoutManager (mGridLayoutManager); recilerView.addItemDecoration (новий 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


0

Не багато відповіді, але у мене була така ж проблема, навіть якщо код був правильним. Іноді це просто найпростіший варіант. У цьому випадку помилка ОП також може бути відсутня <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />в Маніфесті, який відтворює ту саму помилку.


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"/>

Я вважаю, що проблема в трьох розділених лініях. У будь-якому випадку, я вважаю, що це проста проблема, я завтра буду над цим працювати; думав, що я повинен написати те, що знайшов, перш ніж забути про цю тему.


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внутрішньо.


0

// Це трапляється, коли ви не встановлюєте адаптер під час фази створення: call 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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.