Wreszcie znalazłem rozwiązanie i działa. Powiedz mi, jeśli coś robię źle. Zasadniczo działa jak DialogFragment z this guide, ale zrobiłem to trochę inaczej.
1) Ich różnica jest taka sama jak w DialogFragment i Dialog, a obie są modalne. Jeśli potrzebujesz trwałego okna dialogowego, użyj BottomSheetBehaviour instead (okazało się, że oba okna dialogowe musiały być modalne w mojej aplikacji).
2) Najpierw muszę odpowiedzieć na trzecie pytanie za pomocą jakiegoś kodu, a następnie łatwo odpowiem na drugie pytanie.
3) Utwórz nowy public class
, który został oznaczony jako FragmentRandomEventPoll. Są tu dwie rzeczy, które należy wdrożyć tutaj.
Metoda przesłaniania onCreateView
. To jest prawie taki sam jak onCreate
sposób w działaniach, z wyjątkiem tego, że zwraca widoku należy nadmuchać:
// 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;
}
statyczna metoda, którą można przekazać niezbędne dane i uzyskać nową instancję tej klasy (Prawdopodobnie mógłbym użyłem zwykłego konstruktora, będę musiał poeksperymentować z tym nieco więcej). URandomEventListItem
to klasa modelu danych.
public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
headerItem = item.getHeader();
return fragment;
}
2) Aby uzyskać zdarzeń wejściowych w działalności lub jakimkolwiek innym miejscu, zdefiniować interfejs z niezbędnymi metodami i stworzyć metody setter na to instancja:
private PollButtonClickListener listener;
public void setListener(PollButtonClickListener listener) {
this.listener = listener;
}
public interface PollButtonClickListener {
void onAnyButtonClick(Object data)
}
A w miejscu, gdzie chcemy aby uzyskać dane („dialog_event_poll” tag został określony w układzie):
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");
}
Jeśli jest coś wujek ar, moje pliki projektów można znaleźć na Github.