Android getActivity() renvoie toujours la valeur null à l'intérieur de fragment

J'ai un problème étrange dans lequel j'ai rencontré:Le getActivity() la méthode toujours renvoie la valeur null à l'intérieur de fragment. Je l'appeler après la onAttach() et onCreateView() sont le point de terminer leur course.

Ce fragment de vie à l'intérieur d'un FragmentActivity() qui contient la pile de fragments, et la façon dont je l'ajout du fragment, c'est:

(Ce code est appelé à partir de la onCreate() du Fragment d'Activité())

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

J'espère que c'est assez clair

Edit 1:

L'appel à getActivity():

protected OnDoneListener nDoneListener = new OnDoneListener() {

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


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

...
...

Cette fonction de rappel est appelée à partir d'une autre classe.

Edit 2:

class MemoryManager()
{

    private OnDoneListener nDoneListener;

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

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

}

La MemoryManaget elle-même appelle à updateUiOnRequestFinish() à partir d'un autre rappel

Edit 3:

La FragmentManager journaux sont:

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

Et il semble bien pour moi. Donc je suppose que ce bug se rapporte à la façon dont je l'appel le getActivity() de la fonction de rappel.

il ne étrange si vous n'êtes pas familier avec le Fragment du cycle de vie ... developer.android.com/guide/components/... ... vérifiez également quelques lignes avant ce paragraphe ... êtes-vous en ajoutant Fragment à l'Activité dans l'Activité constuctor?
Pouvez-vous mettre le code avec le getActivity() de la ligne ?
Selvin: à Partir de votre commentaire, il implique que c'est une question triviale, et bien j'espère que vous avez raison, mais vous avez probablement pas. Je sais ce lien et de son contenu et de toujours avoir ce problème
Avez-vous réellement lu sur la page Selvin lié? "Attention: Si vous avez besoin d'un objet de Contexte au sein de votre Fragment, vous pouvez appeler getActivity(). Cependant, veillez à appeler getActivity() uniquement lorsque le fragment est attaché à une activité. ..." je ne suis pas sûr de ce que tu veux dire par "après" onAttach et onCreateView, mais un fragment n'est pas attaché pendant ces méthodes. Essayez d'appeler getActivity de onActivityCreated ou par la suite. Aussi, oui, merci de poster où que vous êtes en train d'appeler getActivity.
Dans ce cas, FragmentManager.enableDebugLogging(true) est un sauveur. Chercher quelque chose qui pourrait être de déplacer votre fragment d'arrêter et de partir. Votre fragment est certainement pas attaché, ou getActivity() serait de vous donner une référence.

OriginalL'auteur Nativ | 2013-04-08