recyclerview Nessun adattatore collegato; layout di salto


241

Appena implementato RecyclerViewnel mio codice, in sostituzione ListView.

Tutto funziona bene. I dati sono visualizzati.

Ma vengono registrati messaggi di errore:

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

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

per il seguente codice:

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

Come puoi vedere, ho collegato un adattatore per RecyclerView. Quindi perché continuo a ricevere questo errore?

Ho letto altre domande relative allo stesso problema, ma nessuna di queste ha aiutato.


gli artisti sono vuoti? cosa succede cambiando setAdapter e setLayoutManager?
Cintura nera

Devi usare un RecyclerView.Adapter
Octopus38

12
Potresti vederlo se non stai inizializzando recyclerview non appena è collegato alla finestra.
yigit

1
@yigit Sto aspettando il retrofit per scaricare i dati e dopo che è finito il codice dato viene eseguito!
equitharn

3
Quanto è grave questo errore? Questo può essere ignorato? Comunque uso setAdapter (null) per evitare l'errore.
priyankvex il

Risposte:


243

Puoi assicurarti di chiamare queste istruzioni dal thread "principale" (ad esempio all'interno del onCreate()metodo). Non appena chiamo le stesse dichiarazioni da un metodo "ritardato". Nel mio caso a ResultCallback, ricevo lo stesso messaggio.

Nel mio Fragment, chiamare il codice sottostante dall'interno di un ResultCallbackmetodo produce lo stesso messaggio. Dopo aver spostato il codice sul onConnected()metodo all'interno della mia app, il messaggio era sparito ...

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

9
Ma prima devo scaricare i dati e poi visualizzarli!
equitharn

93
Basta impostare prima un adattatore vuoto, aggiornarlo non appena si hanno i dati (questo è ciò che funziona per me).
Peter,

3
Questo è ciò che ha suggerito Yigit!
equitharn

13
@equitharn Dovresti prima impostare un adattatore vuoto, quindi i dati vengono scaricati, chiama mAdapter.notifyDataSetChanged (), che ha funzionato per me.
DomonLee,

2
Questa soluzione non mi sta aiutando. In effetti nessuna soluzione in questo thread mi sta aiutando. Qualcuno può guardare nel mio caso qui
Pulak,

41

Stavo ricevendo gli stessi due messaggi di errore fino a quando non ho risolto due cose nel mio codice:

(1) Per impostazione predefinita, quando si implementano metodi in RecyclerView.Adapteresso genera:

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

Assicurati di aggiornare il tuo codice così dice:

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

Ovviamente se hai zero oggetti nei tuoi articoli, otterrai zero oggetti visualizzati sullo schermo.

(2) Non lo stavo facendo come mostrato nella risposta in alto: CardView layout_width = "match_parent" non corrisponde alla larghezza di RecyclerView principale

//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) EDIT: BONUS: Assicurati anche di impostare il tuo in RecyclerViewquesto modo:

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

Non così:

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

Ho visto alcuni tutorial usando quest'ultimo metodo. Mentre funziona penso che generi anche questo errore.


1
my getItemCount () assomiglia a questo public int getItemCount() { return artists == null ? 0 : artists.size(); }e LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
equitharn

questo funziona per me: @Override public int getItemCount () {return artisti.size (); }
AstonCheah,

4
Oh Dio. Quel momento in cui torni a SO, e vedi una risposta che hai già votato, e realizzi che stavi facendo la stessa cosa stupida. Grazie ancora @Micro.
androidevil,

20

Ho la stessa situazione con te, il display è ok, ma nella locat appare un errore. Questa è la mia soluzione: (1) Inizializza RecyclerView e collega l'adattatore ON CREATE ()

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

(2) chiama notificationDataStateChanged quando ottieni i dati

adapter.notifyDataStateChanged();

Nel codice sorgente di recyclerView, c'è un altro thread per controllare lo stato dei dati.

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

            }
        }
    };

In dispatchLayout (), possiamo trovare che c'è l'errore in esso:

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

ho questo problema, qualche volta il problema è recycleView messo nell'oggetto ScrollView

Dopo aver verificato l'implementazione, il motivo sembra essere il seguente. Se RecyclerView viene inserito in uno ScrollView, durante la fase di misurazione la sua altezza non è specificata (perché ScrollView consente qualsiasi altezza) e, di conseguenza, diventa uguale all'altezza minima (come da implementazione) che è apparentemente zero.

Hai un paio di opzioni per risolvere questo problema:

  1. Impostare una certa altezza su RecyclerView
  2. Impostare ScrollView.fillViewport su true
  3. Oppure tenere RecyclerView fuori da ScrollView. Secondo me, questa è di gran lunga l'opzione migliore. Se l'altezza di RecyclerView non è limitata - come accade quando viene inserita in ScrollView - allora tutte le viste dell'adattatore hanno abbastanza spazio in verticale e vengono create tutte in una volta. Non è più possibile riciclare le viste, il che in qualche modo infrange lo scopo di RecyclerView.

(Può essere seguito anche per android.support.v4.widget.NestedScrollView)


l'impostazione ScrollView.fillViewport su true ha risolto il mio problema, grazie mille
Eman

10

1) Crea ViewHolder che non fa nulla :)

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

2) Crea nuovamente RecyclerView che non fa nulla :)

// 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) Ora, quando il tuo vero riciclatore non è pronto, usa quello di esempio come di seguito.

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

Questa non è la soluzione migliore, ma funziona! Spero sia utile.


Ciao, per favore, ho lo stesso errore e non so dove dovrei verificare se il riciclatore non è pronto a passare un adattatore vuoto) e dove posso verificare se il riciclatore è pronto (per passare l'adattatore con i dati)
James

Questo è fantastico, ecco un gist in stile drag'n drop gist.github.com/anonymous/bcf027945f08f40601090c55d6048e21
nmu

9

Succede quando non si imposta l'adattatore durante la fase di creazione:

@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);
    ....
}

Basta spostare l'impostazione dell'adattatore su onCreate con dati vuoti e quando si dispone della chiamata dati:

mAdapter.notifyDataSetChanged();

assicurati di impostare i dati nel costruttore customadapter nel metodo onCreate
Mohit Singh

4

Controlla se hai perso di chiamare questo metodo nel tuo adattatore

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

3

Assicurati di impostare il layout manager per RecyclerView:

mRecyclerView.setLayoutManager(new LinearLayoutManager(context));

Invece di LinearLayoutManager, puoi usare anche altri gestori di layout.


3

Ho avuto lo stesso errore che ho risolto facendo questo se stai aspettando dati come me usando retrofit o qualcosa del genere

Metti prima di Oncreate

private ArtistArrayAdapter adapter;
private RecyclerView recyclerView;

Inseriscili nel tuo 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);

Quando ricevi i dati messi

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

Ora vai nella tua classe ArtistArrayAdapter e fai ciò che farà se l'array è vuoto o è nullo farà GetItemCount restituendo 0 se non lo farà le dimensioni dell'array degli artisti

@Override
public int getItemCount() {

    int a ;

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

        a = artists.size();
    }
    else {

        a = 0;

     }

   return a;
}

3

Queste linee devono essere in OnCreate:

mmAdapter = new Adapter(msgList);
mrecyclerView.setAdapter(mmAdapter);

2

Ciò accade perché il layout gonfiato effettivo è diverso da quello a cui si fa riferimento durante la ricerca di recyclerView. Per impostazione predefinita quando si crea il frammento, il metodo onCreateView appare come segue: return inflater.inflate(R.layout.<related layout>,container.false);

Invece, crea separatamente la vista e usala per fare riferimento a recyclerView View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;


2

Inizializza prima l'adattatore

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

Ogni volta che c'è una modifica nel set di set di dati, basta chiamare il metodo updateComments.


2

Per coloro che usano l' RecyclerViewinterno di un frammento e lo gonfiano da altre viste: quando si gonfia l'intera vista del frammento, assicurarsi di legare ilRecyclerView alla sua vista radice.

Mi collegavo e facevo tutto correttamente per l'adattatore, ma non ho mai fatto l'associazione. Questa risposta di @Prateek Agarwal ha tutto per me, ma qui c'è più elaborazione.

Kotlin

    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
}

Giava

  @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);

Basta sostituire il codice sopra con questo e dovrebbe funzionare. Quello che hai fatto di sbagliato è stato chiamato setAdapter (adattatore) prima di chiamare il layout manager.


1

Questo è davvero un semplice errore che stai ricevendo, non c'è bisogno di fare alcun codice in questo. Questo errore si verifica a causa del file di layout errato utilizzato dall'attività. Con IDE ho creato automaticamente un layout v21 di un layout che è diventato un layout predefinito dell'attività. tutti i codici che ho fatto nel vecchio file di layout e in quello nuovo avevano solo pochi codici XML, il che ha portato a quell'errore.

Soluzione: copiare tutti i codici del vecchio layout e incollarli nel layout v 21


1

Nel mio caso, stavo impostando l'adattatore all'interno di onLocationChanged()callback E debug nell'emulatore. Dal momento che non ha rilevato un cambiamento di posizione non ha mai sparato. Quando li ho impostati manualmente nei controlli estesi dell'emulatore ha funzionato come previsto.


1

Ho risolto questo errore. Hai solo bisogno di aggiungere il layout manager e aggiungere l'adattatore vuoto.

Come questo codice:

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
lo faccio per utenti principianti
mehdi janbarari

1

Basta aggiungere quanto segue a RecyclerView

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

Esempio:

   <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

Ho riscontrato questo errore e ho provato a risolvere il problema fino a quando non ho trovato la soluzione.

Ho creato un metodo privato buildRecyclerView e l'ho chiamato due volte, prima su onCreateView e poi dopo il mio callback (in cui prendo i dati da un'API). Questo è il mio metodo buildRecyclerView nel mio frammento:

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

Inoltre, devo modificare il metodo get-Item-Count nel mio adattatore, perché su On-Create-View l'elenco è nullo e attraverso un errore. Quindi, il mio get-Item-Count è il seguente:

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

    }

0

Nella mia situazione era un componente dimenticato che si trova nella classe ViewHolder ma non si trovava nel file di layout


0

Ho avuto lo stesso problema e mi sono reso conto che stavo impostando sia LayoutManage re l' adattatore dopo aver recuperato i dati dalla mia fonte invece di impostare i due nel metodo onCreate .

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

Quindi notificato l'adattatore sulla modifica dei dati

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

Questo problema è perché non ne stai aggiungendo uno LayoutManagerper teRecyclerView .

Un altro motivo è perché stai chiamando questo codice in un NonUIThread. Assicurati di chiamare questa chiamata in UIThread.

La soluzione è solo che devi aggiungere un LayoutManagerper il RecyclerViewprima di te setAdapternel thread dell'interfaccia utente.

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

Se è necessario ritardare l'impostazione LayoutManager, è necessario eseguire questa operazione dal metodo di richiamata: recyclerView.post (() -> {recyclerView.setLayoutManager (mGridLayoutManager); recyclerView.addItemDecoration (new ItemOffsetDecoration (itemGap));});
ievgen,

0

Il mio problema era che la mia visione del riciclatore sembrava così

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

Quando avrebbe dovuto apparire così

       <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

Nella RecyclerViewclasse dell'adattatore, ad esempio MyRecyclerViewAdapter, crea un costruttore con i seguenti parametri.

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

mDatasono i dati che passerai all'adattatore. È facoltativo se non si hanno dati da trasmettere. mInflaterè l' LayoutInflateroggetto che hai creato e che usi inOnCreateViewHolder funzione dell'adattatore.

Successivamente, si collega l'adattatore in MainActivity o ovunque si desideri nel thread principale / UI in modo corretto

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

Risolto impostando l'elenco vuoto inizializzato e l'adattatore in basso e chiamando notificationDataSetChanged quando i risultati vengono recuperati.

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    recyclerviewItems.setLayoutManager(linearLayoutManager);
    someAdapter = new SomeAdapter(getContext(),feedList);
    recyclerviewItems.setAdapter(someAdapter);

0

Ho perso 16 minuti della mia vita con questo problema, quindi ammetterò questo errore incredibilmente imbarazzante che stavo facendo: sto usando Butterknife e lego la vista su onCreateView in questo frammento.

Ci è voluto molto tempo per capire perché non avevo un layoutmanager, ma ovviamente le viste vengono iniettate in modo che non siano effettivamente nulle, quindi il riciclatore non sarà mai nullo .. whoops!

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

Se stai riscontrando un problema come questo, traccia la tua vista e usa qualcosa di simile uiautomatorviewer


0

Non c'è molta risposta, ma ho avuto lo stesso problema anche con il codice corretto. A volte, è solo la più semplice delle marche. In questo caso, l'errore del PO può anche mancare <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />nel Manifest, che riproduce lo stesso errore.


0

Nel mio caso è successo perché ho incorporato un RecyclerView in un LinearLayout.

In precedenza avevo un file di layout contenente solo un RecyclerView di root come segue

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

Credo che il problema sia all'interno delle 3 righe separate. Comunque, penso che sia un problema semplice, domani ci lavorerò sopra; ho pensato che dovrei scrivere quello che ho trovato prima di dimenticare questa discussione.


0

Aggiungendo ancora un'altra risposta da quando mi sono imbattuto in questa discussione cercando su Google l'errore. Stavo cercando di inizializzare un PreferenceFragmentCompatma ho dimenticato di gonfiare le preferenze XML in onCreatePreferencesquesto modo:

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

L'errore è stato un mistero fino a quando ho capito che PreferenceFragmentCompatdoveva essere utilizzato RecyclerViewinternamente.


0

// Succede quando non si sta impostando l'adattatore durante la fase di creazione: chiamare notifyDataSetChanged () quando la risposta api sta funzionando

@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();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.