Току-що имплементирах Recyclerview в моя код, като замених Listview.
всичко работи добре. Обектите се показват.
но logcat казва
15:25:53.476 E/RecyclerView﹕ Няма прикрепен адаптер; прескача се оформлението
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 );
Получавах същите две съобщения за грешка, докато не поправих две неща в кода си:
(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
по следния начин:
<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" />
Виждал съм някои уроци, в които се използва последният метод. Въпреки че работи, мисля, че генерира и тази грешка.
Това се случва, когато не сте задали адаптера по време на фазата на създаване:
@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();