¿Cómo agregar un botón al final de RecyclerView?
Quiero mostrar un botón al final de RecyclerView.
Con ListView había un método addFooterView (), cómo hacer lo mismo con RecylerView.
- Recyclerview no llama aCreateViewHolder
- Recyclerview Sin adaptador conectado; Saltar el diseño
- LinearLayoutManager setOrientation después de rotación del teléfono no funciona
- Cómo deshabilitar el desplazamiento de RecyclerView excepto programáticamente
- Android TV RecyclerView interacción con el foco
- Recyclerview lag en desplazamiento debido a los anuncios de Admob
- Android selectableItemBackground ningún efecto de resplandor en la prensa larga
- RecyclerView se bloquea cuando "las vistas desechadas o conectadas no se pueden reciclar"
- Seleccione elementos en RecyclerView
- ¿Cómo obtener la Scrollposition en Recyclerview / Layoutmanager?
- Actualizar RecyclerView.Adapter después de la intención de la cámara
- Centrar verticalmente el elemento seleccionado en RecyclerView
- ¿Cómo implementar multi-select en RecyclerView?
Una manera de hacerlo sería hacer que su vista de pie de un "ViewType" de su adaptador. Para hacer eso, anula getItemViewType para devolver un valor diferente para su último elemento.
@Override public int getItemViewType(int position) { return (position == mData.size()) ? VIEW_TYPE_FOOTER : VIEW_TYPE_CELL; }
Luego, en el onCreateViewHolder, maneje el tipo de vista diferente.
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_CELL) { //Create viewholder for your default cell } else { //Create viewholder for your footer view } }
No olvide actualizar el valor devuelto por getCount () agregando 1, y para distinguir los 2 tipos de ViewHolder en OnBindViewHolder (con instanceof por ejemplo).
Me encontré con este problema y encontré esta respuesta. La respuesta seleccionada actual es correcta, pero falta algunos detalles. Aquí está la implementación completa,
Agregue este método a su adaptador
@Override public int getItemViewType(int position) { return (position == myItems.size()) ? R.layout.button : R.layout.item; }
Comprobará si la posición actual es más allá del último artículo en su lista, si es entonces él volverá el valor de la disposición del botón a este método,
@Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView; if(viewType == R.layout.item){ itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); } else { itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.button, parent, false); } return new MyViewHolder(itemView); }
El método anterior comprueba si el viewType
pasado es la disposición del item
o la disposición del button
y después infla la vista occordingly y envía la opinión inflada a este método,
@Override public void onBindViewHolder(MyViewHolder holder, int position) { if(position == myItems.size()) { holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "Button Clicked", Toast.LENGTH_LONG).show(); } }); } else { final String name = myItems.get(position); holder.title.setText(name); } }
Esto comprueba si hemos superado el último item
de la lista y si lo estamos, entonces establece el método onClick
en nuestro botón. De lo contrario, crea un item
como normal.
También necesitamos cambiar el método getItemCount
a este
@Override public int getItemCount() { return myItems.size() + 1; }
Puesto que estamos pasando por todos los items
y luego añadiendo un button
al final, el + 1
es nuestro botón.
Finalmente, necesitamos agregar nuestra vista a la clase myViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder { public TextView title; public Button button; public MyViewHolder(View view) { super(view); title = (TextView) view.findViewById(R.id.title); button = (Button) view.findViewById(R.id.bottom_button); } }
¡Espero que esto ayude!
- ShareActionProvider no se puede hacer clic y no se procesa correctamente en el primer procesamiento
- Cómo convertir una fecha dd / mm / aaaa a aaaa-MM-dd HH: mm: ss Android