2014-08-31 14 views
10

Google dokümanları tarafından tasarlandığı şekilde bir gezinti çekmecesi yapıyorum ancak parçanın değiştirilmediği bir sorunum var. http://developer.android.com/training/implementing-navigation/nav-drawer.htmlParça İşlem yükü boş görüntü ancak parça döndürüldükten sonra gösteriliyor

Uygulama ilk yüklendiğinde, varsayılan parça yüklenir. Çekmece listesinde başka bir öğeye tıklamak boş bir görüntü bırakır Ancak cihazı döndürdüğünüzde, seçilen parçayı yükler.

public void selectNavActivty(int position){ 
    // TODO Changing between the different screens selection 
    fragment = null; 
    switch (position) { 
     case 0: 
      fragment = OverLay.newInstance(); 
      break; 
     case 1: 
      fragment = Dummy.newInstance(); 
      break; 
     } 

    if(fragment != null) { 
     // attach added to handle viewpager fragments 
     FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
     trans.replace(R.id.content_frame, fragment).attach(fragment) 
      .addToBackStack(null); 

     trans.commit(); 
     getFragmentManager().executePendingTransactions(); 
    } else { 
     Log.d("Drawer Activity","Error in creating Fragment"); 
    } 
} 
+1

SAME sorunum var. Bu yaygın değil. 20 denemede 1 olur. onActivityCreated oluşturuldu, görünüm boş olabilir VEYA görünümünün bir kısmı boş olabilir ... Değiştirmek yerine ekleyin. – apmartin1991

+0

@ apmartin1991 kod snippet'lerinizi burada bir yere (örneğin, bir gist.github.com gibi) sağlayabilir - kök nedenini anlamak daha kolay olurdu? (örneğin, asıl gönderide, .attach() çağrılır, ancak yapılmamalı ve executePendingTransactions() 'işlevini çağırmaya gerek yok, ancak sizin sorununuz hakkında bir şey bilmiyoruz. –

+0

Konstantin Loginov - İşte aynı şey hakkında benim soru http://stackoverflow.com/questions/34742360/fragment-transaction-loads-a-blank-view – apmartin1991

cevap

5

Gezinme menüsü parçası işlemleri için aşağıdaki yaklaşımı kullanıyorum, bu şekilde parça eklenecek ve üstüne yerleştirilecektir.

String name = "myFragment"; 
getSupportFragmentManager() 
.beginTransaction() 
.replace(R.id.content_frame, fragment, name) 
.commit(); 

attach() işlevine bakın. Farklı bir parça yaşam döngüsünü takip eder. Ayrıca, düzen dosyalarınızın çerçeve düzeninin görünür olduğundan emin olun. Çözelti, işinize yaraması için parça kodu ile birlikte xml kodunu paylaşabilir etmezse

if(fragment != null) { 
     // attach added to handle viewpager fragments 
     FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
     trans.replace(R.id.content_frame, fragment); 
     trans.addToBackStack(null); 
     trans.commit(); 
    } else { 
     Log.d("Drawer Activity","Error in creating Fragment"); 
    } 

:

0

aşağıda kodunuzu değiştirin.

+1

Sadece kopyalayıp @Veedka'nın cevabı değil mi? –

0

Fragman eklendikten sonra etkinlik durumuna eklenir ve görünümü tanımlı Kapsayıcı görünümüne eklenir. Ancak, hiçbir şey eklenmemişse, UI'ye parça eklenmemişse hiçbir şey görüntülenecektir. Sadece parça yöneticisine ekler. Ancak, UI'de bir kapsayıcıya görünümüne zaten eklenmiş ve bundan sonra çıkartılmışsa, bağladığında kapsayıcısında tekrar görüntülenir. Son olarak, parçalarını parçalara ayırıp yok et seçeneğini kullanabilirsiniz. Geçici olarak görüntüle ve etkinliğini kaybetmeden gelecekteki görünümünü görüntülemek ve oluşturmak istersiniz.

https://stackoverflow.com/a/18979024/3329488

0

Çözümümün parçası yerine benzersiz etiketine sahip tüm fragman etiketlemektir. Ayrıca, oluşturma sırasında numaralı özgün parçacığa benzersiz bir etiket atadığınızdan emin olun. Daha etkili bir yol, aynı olanı yeniden oluşturmadan önce parçayı tanımlamaktır.

public void selectNavActivty(int position){ 
// TODO Changing between the different screens selection 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragment = fragmentManager.findFragmentById(R.id.content_frame); 
    String fragmentTag = null; 
    switch (position) { 
     case 0: 
      fragmentTag = "case0Tag"; // please change to better tag name 
      break; 
     case 1: 
      fragmentTag = "case1Tag"; // please change to better tag name 
      break; 
     default: 
      Log.d("Drawer Activity","Error in creating Fragment"); 
      return; 
    } 
    if (fragmentTag != null && !fragment.getTag().equals(fragmentTag)) 
    fragmentManager.beginTransaction().replace(R.id.content_fragment, fragment, tag).commit(); 
}