Android getActivity () restituisce sempre il frammento nullo

Ho un problema strano in cui ho incontrato: Il metodo getActivity () restituisce sempre frammento nullo all'interno. Lo chiamo dopo che onAttach () e onCreateView () stanno completando la loro corsa.

Questo frammento vive all'interno di un FragmentActivity () che contiene una pila di frammenti e il modo in cui aggiungo un frammento ad esso è:

  • Come scrivere file in archiviazione pubblica esterna in Android in modo che siano visibili da Windows?
  • Come fa alcune applicazioni (wechat) ignorare la posizione falsa e poi individuare quello reale?
  • come impostare valori per xlabels e ylabels in mpandroidchart
  • Come posso individuare il runtime Android (Dalvik o ART)?
  • Compressione di immagini come Whatsapp e altri messaggeri su Android
  • ViewPager come una coda circolare / avvolgimento
  • (Questo codice viene chiamato dal onCreate () dell'attività di frammento ())

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

    Spero che sia abbastanza chiaro

    Modifica 1:

    La chiamata a getActivity ():

     protected OnDoneListener nDoneListener = new OnDoneListener() { @Override public void OnDone(final int counter, final String name) { if (getActivity() != null) ((TabActivity) getActivity()).RunOnUiThread(new Runnable() { 

    … …

    Questa chiamata viene chiamata da una class diversa.

    Modifica 2:

     class MemoryManager() { private OnDoneListener nDoneListener; public void setOnDoneListener(OnDoneListener onDoneListener) { this.onDoneListner = onDoneListener; } public void updateUiOnRequestFinish() { onDoneListener.onDone(); } } 

    Il MemoryManaget stesso invita a aggiornareUiOnRequestFinish () da un callback diverso

    Modifica 3:

    I log di FragmentManager sono:

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

    E mi sembra bene. Quindi indovina che questo bug si riferisce al modo in cui chiamiamo getActivity () dal callback.

  • Prendi la mia posizione
  • Corretto modo per chiudere una connessione USB
  • Errore dello studio Android: si è verificato un errore durante il tentativo di calcolare i pacchetti richiesti
  • aggiungendo Admob al gioco Libgdx
  • Richiamata di un frammento da un DialogFragment
  • Android: Come ruotare una bitmap su un punto centrale
  • One Solution collect form web for “Android getActivity () restituisce sempre il frammento nullo”

    Questo problema può essere usato per getActivity () di "android.app.Fragment" o "android.support.v4.app.Fragment"

    se stai usando "android.support.v4.app.Fragment" devi rivedere se non utilizzi getActivity da "android.app.Fragment" o viceversa.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.