tutorial studio recyclerview listas item imágenes ejemplo dinamicas dependencia con cardview card and android data-binding android-databinding

listas - recyclerview android studio ejemplo



Android usa múltiples filas diferentes en RecyclerView para la función de enlace de datos (1)

Está intentando vincular las vistas del adaptador antes de crear una instancia del titular de la vista. La vinculación de la vista debe realizarse en onBindViewHolder () .

Cree una clase de titular de vista base que extienda RecyclerView.ViewHolder y tenga un método de enlace abstracto (obj de objeto) que implementen ShowBookItemsViewHolder y RobotViewHolder . Gracias a George Mount por este enfoque.

public abstract class BaseViewHolder extends RecyclerView.ViewHolder { ... // delegate binding to child class protected abstract void bind(Object obj); }

Luego en onBindViewHolder() :

public void onBindViewHolder(BaseViewHolder holder, int position) { holder.bind(adapterData.get(position) }

Esto pasará su objeto adapterData al titular de vista hijo para enlace:

public class ShowBookItemsViewHolder extends BaseViewHolder { ... public void bind(Object obj) { // Bind here... } }

Reemplazar getItemViewType() para suministrar onCreateViewHolder() con diferentes tipos de vista. Por ejemplo:

public int getItemViewType(int position) { // Change layout every other position return position % 2 == 0 ? 0 : 1; }

Use el tipo de vista para construir los titulares de vista:

public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == 0) { return new ShowBookItemsViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.your_layout, parent, false) else { return new RobotViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.your_layout, parent, false) } }

Asegúrese de que onCreateViewHolder() devuelva el titular de la vista base y la clase de adaptador amplíe RecyclerView.Adapter<YourAdapter.YourBaseViewHolder> .

Básicamente puedo usar múltiples filas en recyclerview adaper sin ningún problema como este código:

@Override public ShowBookItemsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { int layout = -1; switch (viewType) { case 1: layout = R.layout.item_heading_one; break; case 2: layout = R.layout.item_heading_two; break; } View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false); ShowBookItemsViewHolder holder = new ShowBookItemsViewHolder(v); return holder; }

ahora estoy tratando de usar esta característica cuando estoy usando DataBinding, pero me sale un error y no puedo hacer eso

este es mi código equivocado:

@Override public RobotViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { int layout = -1; if (inflater == null) { switch (viewType) { case 0: layout = R.layout.robot_item_action; break; case 1: layout = R.layout.robot_user_action; break; } inflater = LayoutInflater.from(parent.getContext()); } RobotDataBinding dataBinding = RobotDataBinding.inflate(layout, parent, false); return new RobotViewHolder(dataBinding); }