Bir Parça oluşturma: () yapıcı vs newİnstance
Ben son zamanlarda sürekli Fragments
benim oluştururken String
anahtarları Bundles
içine değişkenler geçmek için bilmek zorunda yorgun büyüdü. Bu yüzden karar verdim olun oluşturucular için Fragments
sürer parametreleri istedim ve koydum bu değişkenler içine Bundles
doğru String
tuşu, bu nedenle ortadan kaldırılması gereken başka Fragments
Activities
ihtiyacı olduğunu o anahtarları.
public ImageRotatorFragment() {
super();
Log.v(TAG, "ImageRotatorFragment()");
}
public ImageRotatorFragment(int imageResourceId) {
Log.v(TAG, "ImageRotatorFragment(int imageResourceId)");
// Get arguments passed in, if any
Bundle args = getArguments();
if (args == null) {
args = new Bundle();
}
// Add parameters to the argument bundle
args.putInt(KEY_ARG_IMAGE_RES_ID, imageResourceId);
setArguments(args);
}
Sonra da çıkıp normal gibi bu tartışmalar çekerim.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
// Set incoming parameters
Bundle args = getArguments();
if (args != null) {
mImageResourceId = args.getInt(KEY_ARG_IMAGE_RES_ID, StaticData.getImageIds()[0]);
}
else {
// Default image resource to the first image
mImageResourceId = StaticData.getImageIds()[0];
}
}
Ancak, Tüysüz bu sorun, diğer parametrelerle kurucular Fragment
alt sınıflar, bana @SuppressLint("ValidFragment")
bile uygulamayı çalıştırmak için gerek yok diyerek aldı. Şey, bu kod gayet iyi çalışıyor. ImageRotatorFragment(int imageResourceId)
ya da eski okul yöntemi ImageRotatorFragment()
setArguments()
el üstünde diyebilirim. Android Bölümü (yönünü değiştirmek veya yetersiz bellek) yeniden gerektiğinde, ImageRotatorFragment()
yapıcıyı çağırır ve sonra da doğru ayarlanmış olsun benim değerler ile aynı savı Bundle
geçer.
"Önerilen" ve benim kurucu ise aynı şeyi yapmak gibi görünüyor, hangi örnekler newInstance()
parametreler Fragments
oluşturmak için kullanarak, bir sürü gerektirir. arıyordum yani Kendim test ettim, ve önce, eksi olarak kusursuz bir şekilde bu konuda sızlanan Tüysüz gibi çalışır.
public static ImageRotatorFragment newInstance(int imageResourceId) {
Log.v(TAG, "newInstance(int imageResourceId)");
ImageRotatorFragment imageRotatorFragment = new ImageRotatorFragment();
// Get arguments passed in, if any
Bundle args = imageRotatorFragment.getArguments();
if (args == null) {
args = new Bundle();
}
// Add parameters to the argument bundle
args.putInt(KEY_ARG_IMAGE_RES_ID, imageResourceId);
imageRotatorFragment.setArguments(args);
return imageRotatorFragment;
}
Ben şahsen kurucular kullanarak newInstance()
geçen parametreleri kullanmayı bilmekten çok daha yaygın bir uygulamadır. Faaliyetleri ile bu aynı yapıcı tekniği kullanabilirsiniz inanıyorum ve Tüysüz şikayet etmek için değil.Yani temelde benim soru, neden Google Fragments
parametrelerle kurucular kullanmak istemiyor?
Sadece benim tahminim kullanarak Fragment
yeniden geldiğinde set alamayacak olan Bundle
olmadan bir örnek değişkeni ayarlamak için çalışmıyorsun yani. static newInstance()
bir yöntem kullanarak, derleyici bir örnek değişkeni erişim izin vermiyor.
public ImageRotatorFragment(int imageResourceId) {
Log.v(TAG, "ImageRotatorFragment(int imageResourceId)");
mImageResourceId = imageResourceId;
}
Ben hala bu kurucular parametre kullanımına izin vermemek için yeterli bir sebep gibi gelmiyor. Herkesten anlayış var bu işe?
CEVAP
Ben kurucular kullanarak newİnstance kullanmayı bilmekten çok daha yaygın bir uygulama olduğunu şahsen Bul() ve geçen parametreler.
factory method pattern bunu çok sık modern yazılım geliştirme kullanılır.
Yani temelde benim soru, neden Google Parçaları için parametrelerle kurucular kullanmak istemiyor?
Kendi sorunuza cevap:
Sadece benim tahminim Bölümü yeniden geldiğinde set alamayacak olan Paket kullanmadan bir örnek değişkeni ayarlamak için çalışmıyorsun yani.
Doğru.
Ben hala bu kurucular parametre kullanımına izin vermemek için yeterli bir sebep gibi gelmiyor.
Sizce hoş geldiniz. Bu Tüysüz kontrol edin, her kurucu ya da her çalışma bir moda ya da devre dışı bırakmak için bekliyoruz.
Oluşturma Django şablonları, e-posta...
KİMLİK, etiket, boş, ya da com için ba...
Android parça sayısı: gizlemek kullanm...
Pandalar: değerler önceden varolan bir...
C belirli bir Zaman Dilimi içinde bir ...