2015-07-20 9 views
5

İçinde bir görüntüleyici bulunan bir ana parçam var. Bu görüntüleyici 2 sayfa (liste parçaları) içerir. Etkinliği başlattığımda, ana parça gösteriliyor ve ayrıca ilk sayfalanmış parçayı da gösteriyorum. Bu sayfalanmış parça, AsyncTask kullanarak bir db'den veri görüntüler.Parça ne zaman etkinliğe eklenir?

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    onPageSelected(0); 
} 

@Override 
public void onPageSelected(int position) { 
    Fragment fragment = (Fragment) pagerAdapter.instantiateItem(viewPager, position); 
    if (fragment instanceof IPagedFragment) { 
     ((IPagedFragment) fragment).onShown(getActivity()); 
    } 
} 

ve arayüz: Ana parçada

Ben

public interface IPagedFragment { 
    void onShown(FragmentActivity activity); 
} 

I ilk sorun, I onShown alır, çünkü bir parametre olarak aktiviteye geçmek zorunda olmasıdır denilen aktivite hala boş. Ayrıca, sayfalandırılmış parçacıklar LoginActivity örneğine benzer progressbar mantığı kullanırlar. Ayrıca, aşağıdaki durum almak:

IllegalStateException: Fragman PagedFragment1 {4201f758} android.support.v4.app.Fragment.getResources (Fragment.java:620)

Etkinliğin bağlı olmayan Peki, disk belleği parça UI'ye tamamen erişilince, db'den veri almaya başlamak için doğru aşama nedir? belgelerine

cevap

6

Sorunlar bazı geliştiriciler fragmanları gerçekten iyi ya da yararlı olup olmadığını sorgulamaya başlıyor nedenidir.

Ayrıca "doğru", çeşitli yerlerde yapabildiğiniz ve farklı geliştiricilerin size farklı yanıtlar verebileceği için tartışılabilir. Ancak size bazı yararlı bilgiler sağlamaya çalışalım.

ayırmak/takmak geri aramalar: getActivity() için herhangi bir çağrı fragmanları bağlı olan boş olmayan aktivitesi döndürür, bu iki yöntem arasındaki

public void onAttach(Activity activity); 
public void onDetach(); 

. Onları geçersiz kılabilir ve bu aramayı takip etmek için kullanabilirsiniz.

da yararlıdır:

public void onActivityCreated (Bundle savedInstanceState) 

bu yöntemActivity.onCreate yöntem SONRA olarak adlandırılır. Orada gerçekleşen bazı başlatmalara güveniyorsanız bu çok önemlidir.Ayrıca, parça işleminin gerçekleştiği anda, Fragment.onCreate'un Activity.onCreate'dan sonra gerçekleştiğini ve döndürme sırasında bunun gerçekleşmeden önce gerçekleştiğini hatırlamak önemlidir. Genel bir kural olarak, veri almak/dinlemek için Fragment.onStart()/Fragment.onStop() numaralı telefonu kullanıyorum. Bu çağrılarda, tüm kullanıcı arayüzleri oluşturuldu, parçaya aktivite eklenir ve bir iletişim kutusu/açılır pencere (çağrı/devam) varsa, geri aramalar aranmaz.

0

, etkinlik referans almak fragmentActivity yerel bir nesne oluşturmak ve aşağıda gösterildiği gibi etkinlik referansını almak için. Sizinki gibi

private FragmentActivity fragmentActivity; 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     fragmentActivity=activity; 
    }