sheet medium example bottomsheetdialogfragment bottom android dialog bottom-sheet

android - medium - bottomsheetdialogfragment example



BottomSheetDialog/BottomSheetDialogFragment: ¿cuál usar y cómo? (1)

Finalmente, encontré la solución y funciona. Dime si estoy haciendo algo mal. Básicamente funciona como DialogFragment de esta guía , pero lo he hecho un poco diferente.

1) Su diferencia es la misma que la de DialogFragment y Dialog, y ambas son modales. Si necesita diálogo persistente, use BottomSheetBehaviour en su lugar (descubrí que ambos diálogos tenían que ser modales en mi aplicación).

2) Primero tengo que responder a la tercera pregunta con algún código, y luego será fácil responder al segundo.

3) Crear una nueva public class , que extends BottomSheetDialogFragment , lo llamé FragmentRandomEventPoll. Hay dos cosas que deben implementarse aquí.

  • Reemplazar el método onCreateView . Es casi el mismo que el método onCreate en Actividades, excepto por el hecho de que devuelve la Vista que debe inflarse:

    // We will need it later private static String headerItem; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_random_event_poll, container, false); header = (TextView) v.findViewById(R.id.uRnd_fragment_bottom_sheet_poll_header); skip = (Button) v.findViewById(R.id.uRnd_fragment_bottom_sheet_button_skip); header.setText(...); // I implemented View.OnClickListener interface in my class skip.setOnClickListener(this); return v; }

  • Método estático con el que puede pasar los datos necesarios y obtener una nueva instancia de esta clase (Probablemente podría haber usado un constructor regular, tendré que experimentar con él un poco más). URandomEventListItem es la clase de modelo de datos.

    public static FragmentRandomEventPoll newInstance(URandomEventListItem item) { FragmentRandomEventPoll fragment = new FragmentRandomEventPoll(); headerItem = item.getHeader(); return fragment; }

2) Para obtener eventos de entrada en actividad o en cualquier otro lugar, defina una interfaz con los métodos necesarios y cree el método setter para su instancia:

private PollButtonClickListener listener; public void setListener(PollButtonClickListener listener) { this.listener = listener; } public interface PollButtonClickListener { void onAnyButtonClick(Object data) }

Y en el lugar donde desea obtener sus datos (la etiqueta "dialog_event_poll" se especificó en el diseño):

FragmentRandomEventPoll poll = FragmentRandomEventPoll.newInstance(events.get(id)); poll.setListener(new FragmentRandomEventPoll.PollButtonClickListener() { @Override public void onAnyButtonClick(Object data) { // Do what you want with your data } }); poll.show(getSupportFragmentManager(), "dialog_event_poll"); }

Si hay algo poco claro, mis archivos de proyecto podrían encontrarse en Github .

Estoy trabajando en una aplicación de diseño de materiales. Una característica que quiero implementar es una especie de encuesta. Cuando un usuario hace clic en un elemento de una lista, debe aparecer el cuadro de diálogo de la hoja inferior persistente, que se ve así. Luego, cuando el usuario haga clic en cualquier botón, este cuadro de diálogo debería desaparecer y debería aparecer el cuadro de diálogo modal de la hoja inferior, proporcionando al usuario más información sobre el elemento de la lista al que se hizo clic al principio. Se ve así.

No puedo encontrar explicaciones claras sobre BottomSheetDialog y BottomSheetDialogFragment, y cómo usarlas correctamente, incluso después de leer cierta información sobre los diálogos de AppCompat. Entonces, mis preguntas son:

  1. ¿De qué manera son diferentes y cuál debo usar para cada caso?
  2. ¿Cómo obtener datos en la actividad sobre qué botón se presionó en el cuadro de diálogo?
  3. ¿Algún enlace al código de implementaciones o tutoriales sobre su uso?