Android的getActivity()总是返回内部片段空 [英] Android getActivity() always returns null inside fragment

查看:297
本文介绍了Android的getActivity()总是返回内部片段空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我遇到一个奇怪的问题: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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆