// 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(); }