SORU
1 ŞUBAT 2013, Cuma


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
1 ŞUBAT 2013, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010
  • Wii Minute Radio

    Wii Minute R

    31 Mayıs 2008