Android的getActivity()总是返回内部片段空 [英] Android getActivity() always returns null inside fragment
问题描述
我在我遇到一个奇怪的问题:getActivity()方法的总是返回内部片段空。我的onAttach()和onCreateView()正在整理自己的运行后调用它。
I have a strange problem in which I encountered:The getActivity() method always returns null inside fragment. I calling it after the onAttach() and onCreateView() are finishing their run.
这生活片段包含片段堆栈FragmentActivity()里面,我将片段的方式是:
This fragment lives inside a FragmentActivity() that contains stack of fragments, and the way I adding fragment to it is:
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();
我希望这是非常明显的。
I hope it is clear enough
编辑1:
要getActivity()的调用:
The call to getActivity():
protected OnDoneListener nDoneListener = new OnDoneListener() {
@Override
public void OnDone(final int counter, final String name) {
if (getActivity() != null)
((TabActivity) getActivity()).RunOnUiThread(new Runnable() {
...
...
... ...
此回调被称为从不同的类。
This callback is being called from a different class.
编辑2:
class MemoryManager()
{
private OnDoneListener nDoneListener;
public void setOnDoneListener(OnDoneListener onDoneListener)
{
this.onDoneListner = onDoneListener;
}
public void updateUiOnRequestFinish()
{
onDoneListener.onDone();
}
}
该MemoryManaget本身调用从不同的回调updateUiOnRequestFinish()
The MemoryManaget itself calls to updateUiOnRequestFinish() from a different callback
编辑3:
该FragmentManager日志:
The FragmentManager logs are:
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}
`
和它看起来没什么问题。所以我猜这个错误涉及我所说的getActivity()从回调的方式。
And it looks fine to me. So I'm guessing that this bug relates to the way I call the getActivity() from the callback.
推荐答案
这问题对android.app.Fragment的使用getActivity()或者android.support.v4.app.Fragment
This problem can be for used getActivity() of "android.app.Fragment" or "android.support.v4.app.Fragment"
如果您使用的是android.support.v4.app.Fragment你需要检查,如果你不使用getActivity从android.app.Fragment,反之亦然。
if your are using "android.support.v4.app.Fragment" you need to review if you aren't using getActivity from "android.app.Fragment" or vice versa.
这篇关于Android的getActivity()总是返回内部片段空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!