¿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.

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!

  • TableLayout con RecyclerView
  • Cómo mantener RecyclerView siempre desplazarse hacia abajo
  • ¿Cómo cambiar el color del elemento Recycler?
  • Recyclerview Sin adaptador conectado; Saltar el diseño
  • Cómo implementar coverflow con recyclerview
  • Recyclerview desplazamiento pasado FAB
  • Desplácese hasta la parte inferior de recyclerview con varios tipos de vista
  • Cómo crear elementos de lista inclinada
  • ¿Cómo detectar si RecyclerView está vacío?
  • Los divisores no se mostraron en RecyclerView después de addItemDecoration () llamado
  • Elementos de recyclerview confundidos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.