android - propiedades - recyclerview seleccionar item
Los métodos de RecyclerView.Adapter onCreateViewHolder y onBindViewHolder no se están llamando (2)
Estoy tratando de implementar TwoWayView en mi proyecto siguiendo el proyecto de ejemplo proporcionado en ese enlace. Implementé todo y mi código funciona sin errores, pero la Lista real no se está inflando. Tras la depuración descubrí que el adaptador está configurado correctamente y el método getItemCount
también está devolviendo el conteo positivo, pero los otros dos métodos reemplazados onCreateViewHolder
y onBindViewHolder
no se están llamando. No tengo idea de por qué no está funcionando. Por favor, consulte el código parcial a continuación, se agradece cualquier ayuda. Gracias.
Clase MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter < MyViewHolder > {
private MySimpleCursorAdapter mCursor;
//some other private fields here
public MyAdapter(Context context, Cursor c, int resourceId, ViewType viewType, String containerId) {
mCursor = new MySimpleCursorAdapter(a1,a2,a3,a4,a5,a6); //Passed necessary arguments
....
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.w("onCreateViewHolder", "--------->executed"); //Line not executed
final View view = mCursor.newView(mContext, mCursor.getCursor(), parent);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.w("onBindViewHolder", "--------->executed"); //Line not executed
mCursor.bindView(holder.itemView, mContext, mCursor.getCursor());
}
@Override
public int getItemCount() {
Log.w("count", Integer.toString(mCursor.getCount())); //This is executed
return mCursor.getCount();
}
private class MySimpleCursorAdapter extends SimpleCursorAdapter {
public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mLayoutInflater.inflate(mLayoutToInflate, null);
....
return view;
}
@Override
public void bindView(final View view, Context context, Cursor cursor) {
//Implemented this method for inflating all subviews inside each item of the list
}
}
}
Nota: He pasado por preguntas similares, pero las respuestas proporcionadas no son relevantes para mi pregunta porque mi RecyclerView
no está dentro de ScrollView
y también getItemCount
está devolviendo el conteo positivo.
Creo que olvidó el setLayoutManager(LayoutManager)
en la vista de reciclador. Sin el Administrador de diseño, solo se llama a getItemCount()
.
Pruebe con yourRecyclerview.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
Primero, debe mantener una referencia al Contexto cuando se crea una instancia del Adaptador:
public class MyAdapter extends RecyclerView.Adapter < MyViewHolder > {
private MySimpleCursorAdapter mCursor;
private Context context; // <-- add this line
//some other private fields here
public MyAdapter(Context context, Cursor c, int resourceId, ViewType viewType, String containerId) {
mCursor = new MySimpleCursorAdapter(a1,a2,a3,a4,a5,a6);
this.context = context; // <-- add this line
//Passed necessary arguments
....
}
Luego, en el método onCreateViewHolder, usa esa referencia a Context para crear la vista para ViewHolder:
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.w("onCreateViewHolder", "--------->executed"); //Line not executed
final View view = mCursor.newView(context, mCursor.getCursor(), parent);
return new MyViewHolder(view);
}
Luego, en su CursorAdapter, infle la vista de la siguiente manera:
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = LayoutInflater.from(context).inflate(mLayoutToInflate, parent, false);
return view;
}
Tuve el mismo problema, aunque utilicé una llamada JSON para recuperar los datos en lugar del Cursor Adapter, y estos cambios solucionaron el problema.