Infine, ho trovato la soluzione e funziona. Dimmi se sto facendo qualcosa di sbagliato. Funziona fondamentalmente come DialogFragment da this guide, ma l'ho fatto un po 'diverso.
1) La loro differenza è la stessa di DialogFragment e Dialog, ed entrambi sono modali. Se hai bisogno di una finestra di dialogo persistente, usa BottomSheetBehaviour instead (ho scoperto che entrambe le finestre di dialogo dovevano essere modali nella mia app).
2) Devo prima rispondere alla terza domanda con un po 'di codice, quindi sarà facile rispondere alla seconda.
3) Creare un nuovo public class
, che extends BottomSheetDialogFragment
, l'ho chiamato FragmentRandomEventPoll. Ci sono due due cose che devono essere implementate qui.
Metodo di override onCreateView
. E 'quasi la stessa onCreate
metodo Attività, tranne che restituisce la vista dovrebbe gonfiare:
// 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;
}
Metodo statico che è possibile passare i dati necessari per e ottenere nuova istanza di questa classe (Probabilmente ho potuto ho appena usato un costruttore regolare, dovrò sperimentarlo un po 'di più). URandomEventListItem
è la classe del modello di dati.
public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
headerItem = item.getHeader();
return fragment;
}
2) Per ottenere eventi di input in attività o in qualsiasi altro luogo, definire un'interfaccia con metodi necessari e creare metodo setter per la sua esempio:
private PollButtonClickListener listener;
public void setListener(PollButtonClickListener listener) {
this.listener = listener;
}
public interface PollButtonClickListener {
void onAnyButtonClick(Object data)
}
E nel luogo che si desidera per ottenere i dati (tag "dialog_event_poll" è stato specificato nel layout):
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");
}
Se c'è qualcosa che lo zio ar, i miei file di progetto possono essere trovati su Github.
fonte
2016-05-01 22:58:24