Android getActivity() 总是在 fragment 内返回 null

标签 android android-fragments fragment android-fragmentactivity

我遇到了一个奇怪的问题:getActivity() 方法总是 在 fragment 内返回null。我在 onAttach() 和 onCreateView() 完成运行后调用它。

这个 fragment 存在于包含 fragment 堆栈的 FragmentActivity() 中,我向其中添加 fragment 的方式是:

(此代码是从 Fragment Activity() 的 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}
`

我觉得还不错。所以我猜测这个错误与我从回调中调用 getActivity() 的方式有关。

最佳答案

这个问题可能是因为使用了“android.app.Fragment”或“android.support.v4.app.Fragment”的getActivity()

如果您正在使用“android.support.v4.app.Fragment”,则需要检查您是否没有使用“android.app.Fragment”中的 getActivity,反之亦然。

关于Android getActivity() 总是在 fragment 内返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879203/

相关文章:

java - 有什么方法可以将 GeoFence 添加到 Mapbox 中吗?

java - 使用位图 getPixels 代替位图 getPixel 返回不同的结果?

java - 主机名无效 - 无法从 Android 模拟器连接 IIS express

java - 在Android中使用Bundle将ArrayList类对象传递给另一个 fragment

android - v21 中的滑入/滑出 fragment 动画无法正常工作

android - 如何实例化扩展 MapFragment 的自定义类(单例)

android - 当 isDetached() 返回 false 时,getActivity() 返回 null

java - 如何在 Firestore 中获取特定集合?

android - 使用后退按钮从 fragment 返回到主要 Activity

android - 操作栏选项卡中的 MapFragment