// Cambia el estado de selección del elemento situado en dicha posición.
 private void toggleSelection(int position) {
   // Se cambia el estado de selección
   mAdaptador.toggleSelection(position);
   // Se actualiza el texto del action mode contextual.
   mActionMode.setTitle(mAdaptador.getSelectedItemCount() + " / " + mAdaptador.getItemCount());
   // Si ya no hay ningún elemento seleccionado se finaliza el modo de
   // acción contextual
   if (mAdaptador.getSelectedItemCount() == 0) {
     mActionMode.finish();
   }
 }
 // Elimina de la base de datos los alumnos seleccionados, actualiza el
 // adaptador y cierra el modo de acción conextual.
 public void eliminarAlumnosSeleccionados() {
   // Se obtiene el array con las posiciones seleccionadas.
   ArrayList<Integer> seleccionados = mAdaptador.getSelectedItemsPositions();
   // Por cada selección.
   for (int i = 0; i < seleccionados.size(); i++) {
     // Se obtiene la referencia al alumno.
     Firebase refAlumno = mAdaptador.getRef(seleccionados.get(i));
     // Se elimina el alumo de la bd.
     refAlumno.removeValue();
   }
   lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
   // Se finaliza el modo contextual.
   mActionMode.finish();
 }
 @Override
 public void onResume() {
   super.onResume();
   // Se retaura el estado de la lista.
   lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
   if (mEstadoLista != null) {
     mLayoutManager.onRestoreInstanceState(mEstadoLista);
   }
 }
 private void eliminarAlumno(int position) {
   // Se obtiene la referencia al alumno.
   Firebase refAlumno = mAdaptador.getRef(position);
   final String key = refAlumno.getKey();
   final Alumno alumno = mAdaptador.getItem(position);
   // Se borra de la base de datos.
   refAlumno.removeValue();
   lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
   Snackbar snackbar =
       Snackbar.make(lblNuevoAlumno, R.string.alumno_eliminado, Snackbar.LENGTH_LONG);
   snackbar.setAction(
       R.string.deshacer,
       new View.OnClickListener() {
         @Override
         public void onClick(View v) {
           agregarAlumno(key, alumno);
         }
       });
   snackbar.show();
 }
 @Override
 public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
   // Dependiendo del elemento pulsado.
   switch (menuItem.getItemId()) {
     case R.id.mnuAlumnoEliminar:
       // Si hay elementos seleccionados se pide confirmación.
       if (mAdaptador.getSelectedItemCount() > 0) {
         // Se almacena el modo contextual para poder cerrarlo
         // una vez eliminados.
         mActionMode = actionMode;
         // Se pide confirmación.
         listener.onConfirmarEliminarAlumnos();
       }
       break;
   }
   // Se retorna que se ha procesado el evento.
   return true;
 }
  // Obtiene e inicializa las vistas.
  private void initVistas(View v) {
    lblNuevoAlumno = (TextView) v.findViewById(R.id.lblNuevoAlumno);
    lblNuevoAlumno.setOnClickListener(
        new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            listener.onAgregarAlumno();
          }
        });
    RecyclerView lstAlumnos = (RecyclerView) v.findViewById(R.id.lstAlumnos);
    lstAlumnos.setHasFixedSize(true);
    Firebase ref = new Firebase(App.getUidAlumnosUrl());
    mAdaptador = new AlumnosAdapter(ref.orderByChild("nombre"));
    mAdaptador.setOnItemClickListener(this);
    mAdaptador.setOnItemLongClickListener(this);
    mObservador =
        new RecyclerView.AdapterDataObserver() {
          @Override
          public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);
            lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
          }

          @Override
          public void onItemRangeRemoved(int positionStart, int itemCount) {
            super.onItemRangeRemoved(positionStart, itemCount);
            lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
          }

          @Override
          public void onChanged() {
            super.onChanged();
            lblNuevoAlumno.setVisibility(mAdaptador.isEmpty() ? View.VISIBLE : View.INVISIBLE);
          }
        };
    mAdaptador.registerAdapterDataObserver(mObservador);
    lstAlumnos.setAdapter(mAdaptador);
    mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
    lstAlumnos.setLayoutManager(mLayoutManager);
    lstAlumnos.addItemDecoration(
        new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));
    lstAlumnos.setItemAnimator(new DefaultItemAnimator());
    // Drag & drop y Swipe to dismiss.
    ItemTouchHelper itemTouchHelper =
        new ItemTouchHelper(
            new ItemTouchHelper.SimpleCallback(
                ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT) {
              @Override
              public boolean onMove(
                  RecyclerView recyclerView,
                  RecyclerView.ViewHolder viewHolder,
                  RecyclerView.ViewHolder target) {
                return false;
              }

              @Override
              public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
                // Se elimina el elemento.
                eliminarAlumno(viewHolder.getAdapterPosition());
              }
            });
    itemTouchHelper.attachToRecyclerView(lstAlumnos);
    // Hide / show FAB on scrolling.
    mHidingScrollListener =
        new HidingScrollListener() {

          @Override
          public void onHide() {
            listener.onHideFAB();
          }

          @Override
          public void onShow() {
            listener.onShowFAB();
          }
        };
    lstAlumnos.addOnScrollListener(mHidingScrollListener);
  }
 @Override
 public void onDestroy() {
   super.onDestroy();
   mAdaptador.unregisterAdapterDataObserver(mObservador);
   mAdaptador.cleanup();
 }
 @Override
 public void onDestroyActionMode(ActionMode actionMode) {
   mAdaptador.clearSelections();
   mActionMode = null;
   listener.onShowFAB();
 }