8

Karşılaştığım garip bir sorunum var: get0ctivity() yöntemi her zaman null iç parçacığı döndürür. OnAttach() ve onCreateView() 'dan sonra çalıştırıyorum.() (Bu kod parçası Aktivitesinin onCreate() gelen çağrılan) Android getActivity() her zaman null iç parçacığı döndürür

:

Bu fragman parçalarının yığını içeren bir FragmentActivity() içinde yaşayan, ve buna fragmanını ekleyerek yoldur

SmartFragment fragment; 
fragment = (SmartFragment) Fragment.instantiate(this, 
fragmentClassName, params);  
mStackOfFragments.add(fragment); 
FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
trans.add(R.id.tabcontent, fragment); 
trans.addToBackStack(null); 
trans.commitAllowingStateLoss(); 

Ben yeterince açık umut

Düzenleme 1:

getActivity() çağrısı:

protected OnDoneListener nDoneListener = new OnDoneListener() { 

    @Override 
    public void OnDone(final int counter, final String name) { 


     if (getActivity() != null) 
      ((TabActivity) getActivity()).RunOnUiThread(new Runnable() { 

... ...

Bu geri arama farklı bir sınıftan deniliyor.

Düzenleme 2:

class MemoryManager() 
{ 

    private OnDoneListener nDoneListener; 

    public void setOnDoneListener(OnDoneListener onDoneListener) 
    { 
    this.onDoneListner = onDoneListener; 
    } 

    public void updateUiOnRequestFinish() 
    { 
     onDoneListener.onDone(); 
    } 

} 

MemoryManaget kendisi farklı bir geri arama dan() updateUiOnRequestFinish çağrıları

Düzenleme 3:

FragmentManager günlükleri:

04-08 18:44:05.950: V/FragmentManager(16280): Commit: BackStackEntry{41f9bd60} 
`04-08 18:44:05.950: D/FragmentManager(16280): mName=null mIndex=-1 mCommitted=false 
04-08 18:44:05.950: D/FragmentManager(16280): Operations: 
04-08 18:44:05.950: D/FragmentManager(16280):  Op #0: ADD FragmentMyProfile{41f9bc20 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): Setting back stack index 0 to BackStackEntry{41f9bd60} 
04-08 18:44:05.950: V/FragmentManager(16280): Run: BackStackEntry{41f9bd60 #0} 
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting in BackStackEntry{41f9bd60 #0} by 1 
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting of FragmentMyProfile{41f9bc20 id=0x7f070126} to 1 
04-08 18:44:05.950: V/FragmentManager(16280): add: FragmentMyProfile{41f9bc20 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): Allocated fragment index FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): moveto CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.950: V/FragmentManager(16280): moveto ACTIVITY_CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:05.990: V/FragmentManager(16280): moveto STARTED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
04-08 18:44:06.030: V/FragmentManager(16280): moveto RESUMED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126} 
` 

ve Bana göre iyi görünüyor. Bu yüzden, bu hatanın getActivity() işlevini geri arama yönteminden aldığım şekilde olduğunu tahmin ediyorum. sizin "android.support.v4.app kullanıyorsanız

+1

Fragman yaşam döngüsü ile aşina değilseniz sadece garip ... http://developer.android.com/guide/components/fragments.html#CoordinatingWithActivity ... Ayrıca bu paragraftan önce birkaç satırı kontrol edin ... Etkinlik kurgusunda Etkinlik'e Fragment ekliyor musunuz? – Selvin

+0

Kodu getActivity() çizgisiyle koyabilir misiniz? –

+0

Selvin: Yorumunuzdan bunun önemsiz bir konu olduğunu ima ediyor, umarım haklısınızdır, ama muhtemelen değilsiniz. Bu bağlantıyı ve içeriğini biliyorum ve hala bu problemi yaşıyorum. – Nativ

cevap

7

Bu sorun "android.app.Fragment" veya "android.support.v4.app.Fragment"

Önceden kullanmış getActivity() için olabilir. Fragman "Eğer android.app.Fragment" dan getActivity kullanmıyorsanız veya tersini incelemeniz gerekiyor.

+0

bu benim sorunumu çözdü. Holo Everywhere kullanarak getActivity() yerine getSupportActivity() kullanıyorum. Yine de tam olarak neden TrackCity() parçanın ilk yüklendiğinde çalıştığını, ancak ne zaman gidip gitmeyeceğimi bilmiyorum ... – speedynomads

+0

Doğru adamdın! çok teşekkürler – Nativ