Aktywne Wpisy

Fekalny_okuratnik +121
Treść przeznaczona dla osób powyżej 18 roku życia...

Matka zrobiła awanturę w samolocie i wrzuciła nagranie do sieci. Teraz będzie tłumaczyć się w sądzie.
Wyobraź sobie: wchodzisz do samolotu, zajmujesz miejsce przy oknie – dokładnie to, które wcześniej wybrałeś i za które dopłaciłeś.
Kilka minut później podchodzi do ciebie matka z płaczącym dzieckiem na rękach i żąda, abyś oddał swój fotel maluchowi.
Już masz się zgodzić, bo wychowano cię w duchu uprzejmości i troski o innych. Ale wtedy pojawia się wątpliwość:
Wyobraź sobie: wchodzisz do samolotu, zajmujesz miejsce przy oknie – dokładnie to, które wcześniej wybrałeś i za które dopłaciłeś.
Kilka minut później podchodzi do ciebie matka z płaczącym dzieckiem na rękach i żąda, abyś oddał swój fotel maluchowi.
Już masz się zgodzić, bo wychowano cię w duchu uprzejmości i troski o innych. Ale wtedy pojawia się wątpliwość:
źródło: 559172727_1130067479235021_1551774411615566698_n
Pobierz





Mam fragment (NewShiftFragment), posiadający pole EditText po którego kliknięciu wyświetla się DialogFragment z możliwością wybrania daty. Po wybraniu daty jest ona przekazywana poprzez listener do MainActivity z kolei w MainActivity wywoływana jest metoda, która znajduje się w klasie NewShiftFragment - ustawia ona tekst na przekazaną datę.
W skrócie wygląda to tak:
NewShiftFragment -> (klikniecie w dateEditText) -> odpala się DatePickerDialogFragment -> (wybieram date i naciskam OK) -> data przekazywana jest za pomocą listenera do metody onDateSet w MainActivity -> w niej wywolywana jest metoda newShiftFragment.setDateEditText(formattedDate) -> w tej metodzie wywoływana jest tylko jedna linia dateEditText.setText(date); -> pole w EditText zostaje ustawione na daną datęWszystko to działa dobrze dopóki chociaż raz nie zmienię orientacji ekranu. Wtedy wszystkie kroki wykonują się poprawnie oprócz ostatniego czyli dateEditText.setText(date) - dostaję wtedy wyjątek "java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference".
Dlaczego tak się dzieje? Kiedy sprawdzam dateEditText w metodzie onCreateView to ona nigdy nie jest null'em (po zmianie orientacji również), dlaczego zatem w metodzie setDateEditText się on pojawia? Czy ma to coś wspólnego z tym, że ta metoda jest wywoływana z innej klasy (MainActivity)? Jeśli tak to dlaczego dopóki nie zmienię orientacji to wszystko jest ok?
MainActivity:
http://pastebin.com/gcTnyXUx
NewShiftFragment:
http://pastebin.com/L8TvSV7E
#naukaprogramowania
//edit: sorry, to nic nie zmieni
Chciałbym też dodać, że taki sam problem występuje przy metodzie setShiftEditText(String shiftName) z tym, że tutaj nie pobieram daty tylko element z listy (również z DialogFragment).
A tym, że EditText zapamiętuje wartość się nie przejmuj - to normalne. Może i widok się przeudowuje, ale wartość dla jego id'ka jest zapisana.
private final NewShiftFragment newShiftFragment = new NewShiftFragment();Zamiast operować na lokalnej zmiennej reprezentującej fragment powinieneś wyciągnąć fragment z FragmentManagera przez Tag lub Id, wtedy możesz go rzutować na NewShiftFragment i wywołać odpowiednią metodą. Ja bym tego spróbował ;-)
@Dante651: Aktualnie jestem w pracy więc sprawdzę to dopiero jutro, jednak nie wydaje mi się aby to pomogło. Kilka komentarzy wyżej już napisałem
Kluczowy fakt:
Prześledźmy co się dzieje w
1) Activity onCreate()
2) Fragment stary onCreate()
3) Fragment stary onCreateView()
4) Fragment