recyclerview Δεν υπάρχει προσαρτημένος προσαρμογέας; παράλειψη διάταξης

Μόλις υλοποιήθηκε η Recyclerview στον κώδικά μου, αντικαθιστώντας την Listview.

όλα λειτουργούν μια χαρά. Τα αντικείμενα εμφανίζονται.

αλλά το logcat λέει

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

Όπως μπορείτε να δείτε έχω επισυνάψει έναν προσαρμογέα για το Recycleview. Γιατί λοιπόν συνεχίζω να λαμβάνω αυτό το σφάλμα;

έχω διαβάσει άλλες ερωτήσεις που σχετίζονται με το ίδιο πρόβλημα, αλλά καμία δεν βοηθάει.

Λύση

Μπορείτε να βεβαιωθείτε ότι καλείτε αυτές τις δηλώσεις από το νήμα "main" (για παράδειγμα μέσα στη μέθοδο onCreate()). Μόλις καλέσω τις ίδιες δηλώσεις από μια "καθυστερημένη" μέθοδο. Στην περίπτωσή μου μια ResultCallback, λαμβάνω το ίδιο μήνυμα.

Στο δικό μου Fragment, η κλήση του παρακάτω κώδικα μέσα από μια μέθοδο ResultCallback παράγει το ίδιο μήνυμα. Μετά τη μετακίνηση του κώδικα στη μέθοδο onConnected() μέσα στην εφαρμογή μου, το μήνυμα εξαφανίστηκε...

LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );
Σχόλια (9)

Έπαιρνα τα ίδια δύο μηνύματα σφάλματος μέχρι που διόρθωσα δύο πράγματα στον κώδικά μου:

(1) Από προεπιλογή, όταν υλοποιείτε μεθόδους στο RecyclerView.Adapter παράγει:

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

Βεβαιωθείτε ότι έχετε ενημερώσει τον κώδικά σας ώστε να λέει:

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

Προφανώς, αν έχετε μηδέν αντικείμενα στα αντικείμενα σας, τότε θα εμφανιστούν μηδέν πράγματα στην οθόνη.

(2) Δεν το έκανα αυτό όπως φαίνεται στην κορυφαία απάντηση: https://stackoverflow.com/questions/24503760/cardview-layout-width-match-parent-does-not-match-parent-recyclerview-width

//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 σας ως εξής:

ΟΧΙ έτσι:

Έχω δει κάποια σεμινάρια που χρησιμοποιούν την τελευταία μέθοδο. Ενώ λειτουργεί νομίζω ότι παράγει και αυτό το σφάλμα.

Σχόλια (3)

Συμβαίνει όταν δεν ρυθμίζετε τον προσαρμογέα κατά τη φάση δημιουργίας:

@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();
Σχόλια (1)