我有一个奇怪的问题,其中我遇到了: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()的方式有关。
它只是奇怪,如果你不熟悉的片段生命周期... ... http://developer.android.com/guide/components/fragments.html#CoordinatingWithActivity还检查该段前几行...是你在活动构造函数中添加片段到活动? – Selvin 2013-04-08 12:41:21
你可以把代码与getActivity()行? – 2013-04-08 12:41:53
Selvin:从你的评论意味着这是一个微不足道的问题,我希望你是对的,但你可能不是。我知道这个链接和它的内容,仍然有这个问题 – Nativ 2013-04-08 12:51:16