2015-10-02 10 views
5

Po uaktywnieniu linii EditText w interfejsie użytkownika rozpoczyna się DatePickerFragment, aby użytkownik mógł wprowadzić datę.Jak mogę obsłużyć zmianę orientacji, aby fragment się nie wczytał?

Po zmianie orientacji, jeśli linia EditText ma fokus i wcześniej wprowadzoną datę (tak, aby length() > 0) nie chcę, aby fragment automatycznie się wyświetlał.

Czy istnieje sposób modyfikowania lub dodawania kodu, aby w przypadku nowo utworzonego działania i ustawieniu linii EditText nie zostanie automatycznie uruchomiona DatePickerFragment?

Czy to byłby dobry pomysł, aby zrobić coś w onResume()?

Lub zrób coś z savedInstanceState() i !=null?

public class Activity extends AppCompatActivity { 
... 
EditText.setOnFocusChangeListener(new OnFocusChangeListener() { 
@Override 
public void onFocusChange(View v, boolean hasFocus) { 
... 
    if (hasFocus && (EditText.getText().length() == 0)) { 
     DatePickerFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getSupportFragmentManager(), "datePicker"); 
    } 
    else if (hasFocus && (EditText.getText().length() > 0)) { 
     ... 
     DatePickerFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getSupportFragmentManager(), "datePicker"); 
    } 
} 
}); 
} 

Odpowiedz

4

Czy używasz viewPager lub po prostu dodajesz fragment do swojej aktywności? Jednym ze sposobów jest, aby zapisać dane, które chcesz zachować na obrót w onSaveInstanceState(Bundle outState) wiązki, a następnie przywrócić te dane wewnątrz onCreate użyciu

if(savedInstanceState != null) { 
    //get your data 
} 

lub po prostu dodaj swój fragment tylko wtedy, gdy czynność została załadowany (nie przeładowane po obróceniu urządzenia)

if(savedInstanceState == null) 
{ 
    mFragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 

    YourFragment fragment = new YourFragment(); 

    fragmentTransaction.add(R.id.fragment_container, fragment); 
    fragmentTransaction.commit(); 
} 

Anyways powinno się sprawdzić this i this questons, mogą być pomocne.

+0

Cześć, tylko dodawanie fragmentu w działaniu. Będę edytować powyżej, aby pokazać działanie. – AJW

+0

Ok, więc używam DatePickerDialog, więc pokaż (getSupportFragmentManager) robi fragmenttransactions. Linia "if (savedInstanceState == null)" może być również interpretowana jako nie dodawanie fragmentu, gdy zapisana wartość InventanceSate nie jest pusta, co jest prawdą po obrocie urządzenia? – AJW

+0

Tak, nawet jeśli nie zapisujesz żadnych danych w pakiecie outState, zapisana wartośćInstenceState nie będzie miała wartości NULL, jeśli nastąpi rotacja urządzenia. –

3

Gdybym był tobą, zamiast używać OnFocusChangeListener chciałbym użyć OnClickListener pokazać fragment ilekroć EditText kliknięciu i uczynić EditText non-aktywowana.

W celu zmiany orientacji warto pamiętać, że można zapobiec zmianom konfiguracji wpływającym na działanie, dodając w manifeście android:configChanges="orientation" powiązane działanie. Nie jestem pewien, czy to pomoże w twoim przypadku, ale możesz rzucić okiem.

+0

dodanie android: configChanges = "orientacja" jest dobre, aby zapobiec ponownemu uruchomieniu aktywności. ale nie zadziała, jeśli potrzebujesz tylko przeszkodzić fragmentowi w odtworzeniu, a nie całej aktywności. –

+0

Dziękuję za twoją notatkę. Ale niektórzy użytkownicy będą mieli klawiaturę, na której będą mogli używać klawisza tabulatora zamiast przycisku myszy w EditText. Jeśli wykonam opcję nie fokusowania, użytkownik nie będzie mógł przenieść fokusu na EditText za pomocą klawisza Tab. – AJW

+0

Zapomniałem wspomnieć, że moja aktywność ma również kod OnClickListener, zgodnie z zaleceniami. Dzięki! – AJW

Powiązane problemy