Mein RecyclerView
nicht nennen onCreateViewHolder
, onBindViewHolder
auch MenuViewHolder
Konstruktor, also nichts erscheint in RecyclerView
. Ich habe Protokolle zum Debuggen abgelegt, und es wird kein Protokoll angezeigt. Was könnte das Problem sein?
Mein Adapter:
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();
public MenuAdapter(Context context, List<Menu> data) {
Log.i("DEBUG", "Constructor");
inflater = LayoutInflater.from(context);
Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
this.data = data;
for(Menu menu: this.data){
Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
}
}
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row_menu, parent, false);
MenuViewHolder holder = new MenuViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
Log.i("DEBUG MENU", "onBindViewHolder");
Menu current = data.get(position);
holder.title.setText(current.menu);
}
@Override
public int getItemCount() {
return 0;
}
class MenuViewHolder extends RecyclerView.ViewHolder {
TextView title;
ImageView icon;
public MenuViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.menuText);
}
}
Meine benutzerdefinierte Zeilen-XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/menuText"
android:text="Dummy Text"
android:layout_gravity="center_vertical"
android:textColor="#222"/>
und mein Fragment:
public NavigationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
if (savedInstanceState != null) {
mFromSavedInstaceState = true;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_navigation, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
return view;
}
java
android
android-recyclerview
Malinosqui
quelle
quelle
Antworten:
Ihre
getItemCount
Methodereturns 0
.RecyclerView
Versuchen Sie also niemals, eine Ansicht zu instanziieren. Lass es etwas zurückgebengreater than 0
.beispielsweise
quelle
Zum anderen müssen Sie den Layout-Manager auf RecyclerView einstellen:
quelle
Ich habe vergessen, die folgende Zeile hinzuzufügen, nachdem ich hinzugefügt habe, dass es für mich funktioniert hat
quelle
Dies gilt nicht für Ihren speziellen Fall. Aber das könnte jemand anderem helfen.
Dieser Grund könnte die unachtsame Verwendung der folgenden Methode sein
Wenn dies nicht mit Vorsicht verwendet wird, kann dies dazu führen, dass das
onBindView
und überhauptonCreateViewHolder
nicht aufgerufen wird, ohne dass ein Fehler in den Protokollen auftritt.quelle
Bitte stellen Sie den Layout-Manager so ein,
RecyclerView
dass er den folgenden Code mag:quelle
Für das, was es wert ist, habe ich es beobachtet, als ich den Recycler-Ansichtsadapter eingestellt habe, bevor der Adapter tatsächlich initialisiert wurde. Die Lösung bestand darin, sicherzustellen, dass
recyclerView.setAdapter(adapter)
mit einem Nicht-Null-Adapter aufgerufen wurdequelle
Ich hoffe wirklich, dass dies eines Tages jemandem hilft. Ich verbringe gerade über eine Stunde damit, verrückt zu werden!
Ich hatte das:
Wann hätte ich das haben sollen:
Da ich meinen Adapter törichterweise angerufen habe
adapter
, wurde er vom Adapter der Recycler-Ansicht im Apply-Block beschattet! Ich habe den Adapter in projectAdapter umbenannt, um ihn zu unterscheiden und das Problem zu lösen!quelle
Einstellen der Höhe des
TextView
incustom.xml
oderRecyclerView
. Wenn die Höhe istwrap-content
, ist dieRecyclerView
nicht sichtbar.quelle
Dies geschah, als ich mich
RecyclerView
in einem befandScrollView
und die Android Support Library 23.0 verwendete. Um dies zu beheben, habe ich auf Android Support Library 23.2 aktualisiert:In build.gradle:
quelle
Fügen Sie dies Ihrer Adapterklasse hinzu
quelle
Vielleicht hilft es jemandem, aber wenn Sie die Sichtbarkeit Ihres RecycleView auf GONE setzen, werden die Adaptermethoden überhaupt nicht aufgerufen ... Ich habe einige Zeit gebraucht, um es herauszufinden.
quelle
Ich hatte das gleiche Problem, weil ich
android.support.constraint.ConstraintLayout
in Layout-Ressource verwendet. Wechsel zuFrameLayout
geholfen.quelle
android.support.constraint.ConstraintLayout
?Eine andere Option ist, wenn Sie diese Liste objetc mit get senden, überprüfen Sie beispielsweise, ob Sie die richtige Referenz haben
quelle
Ich hatte viele Stunden mit diesem Problem zu kämpfen. Ich habe ein Fragment verwendet. Und das Problem war nicht die Rückkehr der
view
. Unten ist mein Code:quelle
Siehe meine Antwort, wenn Sie eine Android-Datenbindungsbibliothek verwenden. - Stellen Sie sicher, dass Sie das Layout für die Recycling-Ansicht festlegen und die Anzahl der Elemente größer als 0 sein muss
Viel Spaß beim Codieren :-)
quelle
In meinem Fall habe ich die ID meines RecyclerView auf "recyclerView" gesetzt. Es scheint, dass diese ID bereits irgendwo definiert wurde, denn als ich sie in eine andere ID änderte, wurden die Methoden des Adapters ordnungsgemäß aufgerufen.
quelle
Wenn Sie einen benutzerdefinierten Adapter verwenden, vergessen Sie nicht, den ItemCount auf die Größe Ihrer Sammlung festzulegen.
quelle
In meinem Fall war meine Listengröße 0 und es wurde nicht die onCreateViewHolder-Methode aufgerufen. Ich musste eine Nachricht in der Mitte für die leere Liste als Platzhalter anzeigen, also habe ich es so gemacht und es hat wie ein Zauber funktioniert. Antwort von @Konstantin Burov half.
quelle
Mein Encouter war die überschriebene Methode onBindViewHolder (Inhaber, Position) des nicht aufgerufenen RecyclerView.adaptor. Die Methode onCreateViewHolder wurde aufgerufen, getItemCount wurde aufgerufen. Wenn Sie die Spezifikationen für den Recyclerview-Adapter lesen, werden Sie feststellen, dass, wenn Sie onBindViewHolder (Inhaber, Position, Listennutzdaten) überschrieben haben, dies bevorzugt wird. Also bitte sei vorsichtig.
quelle
onBindViewHolder
?Wenn Sie wrap_content als Höhe Ihrer Liste sowie als Höhe Ihrer Artikelliste angeben, wird nichts angezeigt und keine Ihrer recyclerView-Funktionen wird aufgerufen. Korrigieren Sie die Höhe des Elements oder setzen Sie match_parent für die Listenhöhe. Das hat mein Problem gelöst.
quelle
Mein Fehler war das Aufblasen der falschen Ansicht in Fragment onCreateView.
quelle
Gehe zu deiner XML. Und ändern Sie Ihr Layout, um Inhalte zu verpacken. Das eine Element versteckt das nächste, daher funktionieren die Methoden nicht!
quelle
Bitte machen Sie folgendes
quelle
In meinem Fall hatte ich nach dem Ändern der Aktivität zur Verwendung von ViewModel und DataBinding vergessen, den
setContentView
Methodenaufruf aus deronCreate
Methode zu entfernen . Durch das Entfernen wurde mein Problem gelöst.quelle
Für mich lag es daran, dass setHasStableIds (true); Methode wurde eingestellt. Entfernen Sie das und es wird funktionieren
quelle
recyclerView.setAdapter (Adapter); Die recyclerView-Liste wird durch Aufrufen der Methode gefüllt.
quelle
Stellen Sie sicher, dass Ihre
XML
undKoltin/Java
Code übereinstimmen. In meinem Fall hatte ich ein Problem mit dem,ViewHolder
seit ich geschrieben hatte:Aber da mein XML-Code ist:
Ich musste die private Reihe ändern in:
Außerdem musste ich auch entfernen:
Ich hoffe das kann dir helfen :)
quelle
In meinem Fall fehlte mir der Anruf
notifyDataSetChanged()
nach dem Einstellen der Liste im Adapter.quelle
In meinem Fall vermisse ich es, die Ausrichtung in meinem LinearLayout festzulegen.
Nach dem Hinzufügen des Orientierungsproblems behoben.
quelle
Mein Problem war
layout_height
undlayout_width
der RecyclerView auf eingestellt0dp
.quelle