8

Ich habe ein seltsames Problem, in dem ich begegnete: Die Methode liefert immer null innerhalb des Fragments. Ich rufe es auf, nachdem die onAttach() und onCreateView() ihren Lauf beenden.Android getActivity() gibt immer Null innerhalb des Fragments

Dieses Fragment lebt in einem FragmentActivity(), die Stapel von Fragmenten enthält, und die Art, wie I-Fragment ihn hinzufügen ist:

(Dieser Code aus dem onCreate() der Fragmentes Aktivität aufgerufen wird())

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(); 

ich hoffe, es ist klar genug

Edit 1:

Der Aufruf von getActivity():

protected OnDoneListener nDoneListener = new OnDoneListener() { 

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


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

... ...

Dieser Callback wird von einer anderen Klasse.

Edit 2:

class MemoryManager() 
{ 

    private OnDoneListener nDoneListener; 

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

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

} 

Die MemoryManaget selbst nennt() aus einem anderen Rückruf updateUiOnRequestFinish

bearbeiten 3:

Die FragmentManager Protokolle sind:

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} 
` 

Und es sieht gut aus für mich. Ich vermute also, dass dieser Bug sich auf die Art bezieht, wie ich die getActivity() vom Callback aus anrufe.

+1

es ist nur seltsam, wenn Sie nicht mit Fragment Lebenszyklus vertraut sind ... http://developer.android.com/guide/components/fragments.html#CoordinatingWithActivity ... überprüfen Sie auch einige Zeilen vor diesem Absatz ... sind fügen Sie Fragment zu Aktivität in Activity constuctor hinzu? – Selvin

+0

Können Sie den Code mit der getActivity() - Zeile einfügen? –

+0

Selvin: Aus Ihrem Kommentar geht hervor, dass dies ein triviales Problem ist, ich hoffe, Sie haben Recht, aber Sie wahrscheinlich nicht. Ich kenne diesen Link und seinen Inhalt und immer noch dieses Problem – Nativ

Antwort

7

Dieses Problem kann für gebrauchten getActivity() von "android.app.Fragment" oder "android.support.v4.app.Fragment"

sein, wenn Ihre „android.support.v4.app verwenden. Fragment "Sie müssen überprüfen, wenn Sie nicht getAktiv von" android.app.Fragment "oder umgekehrt verwenden.

+0

das löste mein Problem. Ich verwende getSupportActivity() anstelle von getActivity(), da ich Holo Everywhere verwende. Ich weiß immer noch nicht genau, warum getActivity() funktionierte, als das Fragment zuerst geladen wurde, aber nicht, wenn ich weg und wieder zurück ... – speedynomads

+0

Sie waren der richtige Mann! Danke vielmals – Nativ