Mi RecyclerView
no llama onCreateViewHolder
, onBindViewHolder
incluso MenuViewHolder
constructor, por lo tanto, no aparece nada RecyclerView
. Pongo registros para la depuración, y no se muestra ningún registro. ¿Cuál podría ser el problema?
Mi adaptador:
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);
}
}
Mi fila personalizada 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"/>
y mi fragmento:
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
fuente
fuente
Respuestas:
Su
getItemCount
métodoreturns 0
. Así queRecyclerView
nunca intenta crear una vista de instancia. Haz que devuelva algogreater than 0
.por ejemplo
fuente
Otra es asegurarse de configurar el administrador de diseño en RecyclerView:
fuente
olvidé agregar la siguiente línea después de agregarla, funcionó para mí
fuente
Esto no aplica para su caso particular. Pero esto podría ayudar a alguien más.
Esta razón podría ser el uso descuidado del siguiente método
Si no se utiliza con precaución, esto podría hacer que el
onBindView
yonCreateViewHolder
que no fuese llamado en absoluto, sin error en los registros.fuente
Configure el administrador de diseño para que le
RecyclerView
guste el siguiente código:fuente
Por lo que vale, lo observé cuando configuré el adaptador de vista del reciclador antes de que el adaptador se inicializara realmente. La solución fue asegurarse de que
recyclerView.setAdapter(adapter)
se llamara con un adaptador no nulofuente
Realmente realmente espero que esto ayude a alguien algún día. ¡Acabo de pasar más de una hora para que este se vuelva loco!
Tuve esto:
Cuando debería haber tenido esto:
Como llamé tontamente a mi adaptador
adapter
, ¡el adaptador de la vista del reciclador lo estaba ocultando en el bloque de aplicación! ¡Cambié el nombre del adaptador a projectAdapter para diferenciarlo y resolver el problema!fuente
Establecer la altura de la
TextView
encustom.xml
oRecyclerView
. Si la altura eswrap-content
, laRecyclerView
no será visible.fuente
Esto sucedió cuando
RecyclerView
estaba dentro deScrollView
ay estaba usando Android Support Library 23.0. Para solucionarlo, actualicé a la Biblioteca de soporte de Android 23.2:En build.gradle:
fuente
Agregue esto a su clase de adaptador
fuente
Tal vez ayude a alguien, pero si configura la visibilidad de su RecycleView en GONE, los métodos del adaptador no se llamarán en absoluto ... Me tomó algo de tiempo resolverlo.
fuente
Tuve el mismo problema, porque estaba usando
android.support.constraint.ConstraintLayout
recursos de diseño. Cambiando aFrameLayout
ayudado.fuente
android.support.constraint.ConstraintLayout
?Otra opción es si envía este objeto de lista usando get, verifique si tiene la referencia correcta, por ejemplo
fuente
Luché con este problema durante muchas horas. Estaba usando un fragmento. Y el problema no era devolver el
view
. Debajo está mi código:fuente
Vea mi respuesta si está utilizando la biblioteca de enlace de datos de Android: asegúrese de establecer el diseño para la vista de reciclaje y el recuento de elementos debe ser mayor que 0
Feliz codificación :-)
fuente
En mi caso, configuré la ID de mi RecyclerView en "recyclerView". Parece que esta ID ya estaba definida en alguna parte, porque cuando cambié eso a una ID diferente, los métodos del adaptador se llamaron correctamente.
fuente
Si usa un adaptador personalizado, no olvide establecer el ItemCount al tamaño de su colección.
fuente
En mi caso, el tamaño de mi lista era 0 y no estaba llamando al método onCreateViewHolder. Necesitaba mostrar un mensaje en el centro de la lista vacía como marcador de posición, así que lo hice así y funcionó a las mil maravillas. Respuesta de @Konstantin Burov ayudó.
fuente
Mi estímulo fue el método anulado onBindViewHolder (titular, posición) del RecyclerView.adaptor que no se llama. Se llamó al método onCreateViewHolder, se llamó a getItemCount. Si lee las especificaciones del Adaptador Recyclerview, sabrá que si ha anulado onBindViewHolder (titular, posición, Lista de cargas) se le llamará a favor. Así que por favor ten cuidado.
fuente
onBindViewHolder
?Si coloca wrap_content como altura de su lista, así como la altura de su lista de elementos, no aparecerá nada y no se llamará a ninguna de sus funciones de recyclerView. Arregle la altura del elemento o ponga match_parent para la altura de la lista. Eso resolvió mi problema.
fuente
Mi error fue inflar la vista incorrecta en Fragment onCreateView.
fuente
ve a tu xml. Y cambie su diseño para envolver contenido. ¡El elemento oculta el siguiente, por lo que los métodos no funcionan!
fuente
Por favor haz lo siguiente
fuente
En mi caso, después de cambiar la Actividad para usar ViewModel y DataBinding, se me había olvidado eliminar la
setContentView
llamada alonCreate
método del método. Al eliminarlo, mi problema se resolvió.fuente
Para mí, fue porque setHasStableIds (true); Se estableció el método. Elimina eso y funcionará
fuente
recyclerView.setAdapter (adaptador); llamado La lista recyclerView se completa llamando al método.
fuente
Asegúrese de que su
XML
yKoltin/Java
código de registro. En mi caso, tuve un problema con elViewHolder
ya que había escrito:Pero como mi código XML es:
Tuve que cambiar la fila privada en:
Además, también tuve que eliminar:
Espero que esto pueda ayudarte :)
fuente
En mi caso, me faltaba llamar
notifyDataSetChanged()
después de configurar la lista en el adaptador.fuente
En mi caso, pierdo establecer la orientación en mi LinearLayout.
Después de agregar el problema de orientación solucionado.
fuente
Mi problema era
layout_height
ylayout_width
del RecyclerView configurado en0dp
.fuente