2015-10-02 22 views
5

UI'de EditText hattı odaklandığında, kullanıcının bir tarih girmesi için DatePickerFragment başlatılır.Oryantasyon değişimini nasıl işleyebilirim Fragment yüklemiyor?

Yönlendirme değişikliğinde, EditText satırında netleme ve daha önce girilmiş bir tarih varsa (length() > 0), parçanın otomatik olarak gösterilmesini istemiyorum.

Etkinliğin yeni oluşturulduğu ve EditText hattının odağı varsa, DatePickerFragment otomatik olarak başlatılmayacak şekilde kodu değiştirmenin veya eklemenin bir yolu var mı?

onResume() içinde bir şeyler yapmak iyi bir fikir olabilir mi?

Veya savedInstanceState() ve !=null ile bir şeyler yapın?

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"); 
    } 
} 
}); 
} 

cevap

4

ViewPager'ı kullanıyor musunuz veya yalnızca etkinliğinize parça ekleyin? Birinci yol, onSaveInstanceState(Bundle outState) paket içine dönme üzerinde tutabilir ve ardından kullanılarak

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

onCreate içindeki bu verileri geri yüklemek veya basitçe aktivitesi (cihaz dönüşten sonra yeniden verilmez) yüklendi yalnızca parçasını eklemek istediğiniz verileri

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

    YourFragment fragment = new YourFragment(); 

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

Neyse kesinlikle this ve this questons kontrol etmelidir, bunlar yararlı olabilir.

+0

Merhaba, yalnızca etkinliğe parça ekliyorum. Etkinliği göstermek için yukarıdakileri düzenleyeceğim. – AJW

+0

Tamam, bu yüzden DatePickerDialog kullanıyorum, böylece show (getSupportFragmentManager) fragmenttransactions yapar. "If (savedInstanceState == null)" satırı, aygıtın döndürüldükten sonra true olan savedInstanceSate boş olmadığı zaman parçayı eklemediğinden de yorumlanabilir. – AJW

+0

evet, outState paketine herhangi bir veri kaydetmeseniz bile, cihaz rotasyonu –

3

yerine ben EditText tıklandığında fragman göstermek için bir OnClickListener kullanın ve EditText olmayan odaklanabilir kılacak bir OnFocusChangeListener kullanmak yerine, Yerinde olsaydım.

Yönlendirme değişikliği için, ilgili etkinliğe bildirimde bulunan android:configChanges="orientation" ekleyerek bir etkinlikte etkinleşen yapılandırma değişikliklerini önleyebilirsiniz. Bunun sizin durumunuza yardımcı olup olmadığından emin değilsiniz, ancak bir göz atabilirsiniz.

+0

android: configChanges = "orientation" etkinliğin yeniden başlatılmasını önlemek için iyidir. Ancak, yalnızca yeniden oluşturma işleminin yeniden oluşturulmasını önlemeniz gerekiyorsa çalışmaz, tüm etkinlik değil –

+0

Notunuz için teşekkürler. Ancak bazı kullanıcılar, EditText'teki bir fare bağlantı noktası yerine sekme tuşunu kullanabilecekleri bir klavyeye sahip olacaklar. Odaklama yapmazsam, kullanıcı sekme tuşlarını kullanarak odağı EditText'e taşıyamaz. – AJW

+0

Etkinliğimin önerildiğin gibi, OnClickListener kodunun da olduğundan bahsetmeyi unuttum. Teşekkürler! – AJW