Ik heb zojuist Recyclerview in mijn code geïmplementeerd, ter vervanging van Listview.
Alles werkt prima. De objecten worden weergegeven.
maar logcat zegt
15:25:53.476 E/RecyclerView﹕ Geen adapter aangesloten; layout overslaan
15:25:53.655 E/RecyclerView﹕ Geen adapter bijgevoegd; layout overslaan
voor de code
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Zoals je kunt zien heb ik een adapter bijgevoegd voor Recycleview. Dus waarom krijg ik steeds deze foutmelding?
Ik heb andere vragen gelezen met betrekking tot hetzelfde probleem, maar geen enkele helpt.
Kun je ervoor zorgen dat je deze statements aanroept vanuit de "main" thread (bijvoorbeeld binnen de onCreate()
methode).
Zodra ik dezelfde statements aanroep vanuit een "delayed" methode. In mijn geval een ResultCallback
, krijg ik dezelfde melding.
In mijn Fragment
, levert het aanroepen van onderstaande code vanuit een ResultCallback
methode dezelfde melding op. Na het verplaatsen van de code naar de onConnected()
methode binnen mijn app, was de melding verdwenen...
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.VERTICAL);
list.setLayoutManager(llm);
list.setAdapter( adapter );
Ik kreeg dezelfde twee foutmeldingen totdat ik twee dingen in mijn code herstelde:
(1) Standaard, wanneer je methodes implementeert in de RecyclerView.Adapter
genereert het:
@Override
public int getItemCount() {
return 0;
}
Zorg ervoor dat je je code aanpast zodat er staat:
@Override
public int getItemCount() {
return artists.size();
}
Het is duidelijk dat als je nul items in je items hebt, je ook nul dingen op het scherm te zien krijgt.
(2) Ik deed dit niet zoals blijkt uit het bovenste antwoord: 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) EDIT: BONUS:
Zorg er ook voor dat je je RecyclerView
als volgt instelt:
<android.support.v7.widget.RecyclerView
android:id="@+id/RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
NIET zoals dit:
<view
android:id="@+id/RecyclerView"
class="android.support.v7.widget.RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Ik heb enkele tutorials gezien die de laatste methode gebruiken. Hoewel het werkt denk ik dat het ook deze fout genereert.
Het gebeurt wanneer u de adapter niet instelt tijdens de aanmaakfase:
@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);
....
}
Verplaats gewoon het instellen van de adapter in onCreate met een lege data en wanneer je de data call hebt:
mAdapter.notifyDataSetChanged();