8

我有一个奇怪的问题,其中我遇到了:getActivity()方法总是在片段内返回null。我在onAttach()和onCreateView()完成它们的运行后调用它。Android getActivity()总是返回空片段

此片段住包含片段的堆的FragmentActivity()的内部,并且我添加片段给它的方法是:

(此代码被从片段活性的OnCreate()()调用)

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

我希望这是非常明显的

编辑1:

到getActivity()的调用:

protected OnDoneListener nDoneListener = new OnDoneListener() { 

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


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

... ...

这个回调正在从不同的类中调用。

编辑2:

class MemoryManager() 
{ 

    private OnDoneListener nDoneListener; 

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

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

} 

的MemoryManaget本身调用从一个不同的回调updateUiOnRequestFinish()

编辑3:

的FragmentManager日志:

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

而我看起来很好。所以我猜测这个bug与我从回调中调用getActivity()的方式有关。

+1

它只是奇怪,如果你不熟悉的片段生命周期... ... http://developer.android.com/guide/components/fragments.html#CoordinatingWithActivity还检查该段前几行...是你在活动构造函数中添加片段到活动? – Selvin 2013-04-08 12:41:21

+0

你可以把代码与getActivity()行? – 2013-04-08 12:41:53

+0

Selvin:从你的评论意味着这是一个微不足道的问题,我希望你是对的,但你可能不是。我知道这个链接和它的内容,仍然有这个问题 – Nativ 2013-04-08 12:51:16

回答

7

这个问题对 “android.app.Fragment” 或 “android.support.v4.app.Fragment”

二手getActivity()如果​​您使用的是“android.support.v4.app。片段“,您需要检查是否不使用”android.app.Fragment“中的getActivity,反之亦然。

+0

这解决了我的问题。我使用getSupportActivity()而不是getActivity(),因为我使用Holo Everywhere。仍然不知道为什么getActivity()在片段第一次加载时工作,但不是当我将导航离开,然后返回... – speedynomads 2013-06-04 17:41:44

+0

你是对的人!非常感谢 – Nativ 2013-11-29 13:10:03

相关问题