Refaktoring – DialogFragment.newInstance() – #1E

Wróciłam do kodu napisanego na początku projektu. Nie podoba mi się. Czy to oznacza, że zdążyłam się już czegoś nauczyć?

Przez cały ubiegły tydzień poprawiałam kod. Do struktury folderów dorzuciłam jeszcze jeden o nazwie „Dialogs” i wykrawam z Activities te co większe okienka dialogowe i tworzę z nich osobne klasy dziedziczące po DialogFragment. Zyskuję dzięki temu na przejrzystości kodu w Activity.

Kiedy ostatnim razem próbowałam korzystać z DialogFragment poległam na przekazywaniu zmiennych potrzebnych do identyfikacji obiektu, który edytuję. Tym razem udało mi się to zrobić za pomocą metody newInstance(), w której przekazuję wartości zmiennych, z których mogę później korzystać.

Na początek metoda, którą wywołuję żeby pokazać  okienko dialogu:


private void showNewDinnerDialog(Date date, Dinner dinner){
DialogFragment newFragment = DinnerDialogFragment.newInstance(date.getTime(), dinner);
newFragment.show(getSupportFragmentManager(), "DinnerDialogFragment");
}

W metodzie newInstance() tworzę obiekt, który będzie przechowywał zmienne, incjalizuje je i zasilam nimi mój DialogFragment.


public static DinnerDialogFragment newInstance(long date, Dinner dinner) {
DinnerDialogFragment f = new DinnerDialogFragment();
Bundle args = new Bundle();
args.putLong("date", date);
if (dinner != null) {
args.putLong("dinnerId", dinner.getId());
args.putLong("mealId", dinner.getMeal().getId());
args.putString("mealName", dinner.getMeal().getName());
}
f.setArguments(args);
return f;
}

i odczyt wartości:


mealNameTextView = (TextView) view.findViewById(R.id.meal_name_text);
mealNameTextView.setText(getArguments().getString("mealName", ""));

Czyżby nadchodził czas na podsumowanie udziału w konkursie? może w następnym wpisie 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.