Android getActivity() 在片段内总是返回 null

2024-03-10

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

该片段位于包含片段堆栈的 FragmentActivity() 内,我向其中添加片段的方式是:

(此代码是从 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();

我希望它足够清楚

Edit 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() {

... ...

此回调是从不同的类调用的。

Edit 2:

class MemoryManager()
{

    private OnDoneListener nDoneListener;

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

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

}

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

Edit 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,反之亦然。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android getActivity() 在片段内总是返回 null 的相关文章

随机推荐

  • JCA 1.6 ResourceAdapter 是否需要 ManagedConnectionFactory?

    我写了一个之前的JCA资源适配器 http code google com p drools jca 然而 现在我发现自己不得不写一篇文章来访问BootstrapContext及其相关的WorkManager 并且有效地没有其他原因 如果我
  • getElementsByTagName 不起作用?

    在下面的代码中 我通过使用 javascript 动态分配 偶数 类给所有偶数行应用不同的背景颜色 我正在调用 body 标记的 alternamte 函数 onload 起初 我使用 getElementById 来获取表对象 并且我的代
  • FIREBASE 警告:用户回调引发异常。错误:发送后无法设置标头

    我们正在开发一个应用程序 我们使用 Firebase 作为数据库 并使用 Express 作为中间件 后端来路由我们的 RESTful API 该 API 供我们在 Reactjs 中开发的前端使用 下面是我们的 server js 文件的
  • 使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”?

    我正在使用 NET Framework 和 ASP NET Core 创建 REST Web Api 此 Web API 有一个调用 用于获取请求模型以保存数据 以及一些调用 用于稍后检索数据 大多数数据是我在后端需要的结构化信息 它们被保
  • Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

    一般信息 三个读取器线程从文件中随机读取块 每个块都有一个 ID 然后写入普通的 ArrayList 一旦具有所需 ID 的块被添加到列表中 写入线程就会写入输出文件 因此 我编写了一个 BlockingChunkList 它应该同步 ad
  • 为什么 Firefox 拒绝 ttf 字体

    我有来自网络的 ttf 字体 它们在 ftp 客户端 目录中列为 Windows ttf 字体 我在 Mac OSX 平台上的 Firefox 上使用嵌入字体 但收到以下 Web 控制台错误 17 59 49 201 downloadabl
  • Angularjs 和 jquery 无法以我常规的简单形式工作

    我正在学习 Angularjs 并创建了简单的表单 实际上我是 PHP 开发人员 所以我更喜欢使用 php 作为服务器端脚本语言 我无法将数据提交到服务器 我尝试了很多方法 但是如果我尝试使用标准方法 Angularjs 不起作用 那么这些
  • 如何使用 jQuery 进行重定向? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我使用 HTML 表单提交给 jQuery 验证 然后通过 ajax 将信息发送到 PHP 处理页面 一切都 100 正常工作 除
  • Xcode 7.3 不断在空闲状态下构建

    I noticed that Xcode 7 3 always keep building even in idle time This loads CPU much so sometimes it stops responding Doe
  • 异步构造函数

    我怎样才能最好地处理如下情况 我有一个需要一段时间才能完成的构造函数 var Element function Element name this name name this nucleus this load nucleus name
  • 不在范围内:数据构造函数?

    我是哈斯克尔的新手 我遇到这个问题 Assignment12 hs 5 12 不在范围内 数据构造函数 Suit Assignment12 hs 5 18 不在范围内 数据构造函数 Rank Assignment12 hs 6 11 不在范
  • Java简单计算器

    我用Java编写了这个计算器程序 仅当同时计算两个数字时 此方法才有效 这意味着要获得 1 2 3 的总和 您必须这样做 按 1 按 按 2 按 按 按 3 按 计算结果为 6 但我想对此进行编程 以便我可以通过以下方式获得答案 按 1 按
  • 在 Pi 上通过 python 执行 bluetoothctl 命令

    每次我想在我的 pi 上运行 python 脚本之前 我都会在终端上运行一系列 Bluetoothctl 命令 我想从 pi 自动连接到 BLE 设备 无需任何配对确认或用户交互 以下是每次在运行另一个 python 脚本之前重新启动 pi
  • 事务性与非事务性 msmq

    我不断看到文档 http msdn microsoft com en us library ms702030 VS 85 aspx表示不可能发送到事务范围之外的远程事务 msmq 队列 我发现这很难相信 因为我think我已经这样做了好几个
  • 无法将新元数据附加到捕获的图像

    我正在尝试将我自己的一些字段附加到我捕获的图像中 我似乎能够更改现有的 EXIF 条目 但无法添加新条目 无论是在 EXIF 字典中还是作为单独的字典添加到图像中 当我进行添加时 我可以将它们视为图像数据的一部分 但它们永远不会保存到图像文
  • Acumatica 过滤 PXSelector 具有快速搜索功能

    我有一个自定义 dac 和 pxselector 如下所示 With quick search red bordered search I want to filter with every properties For example w
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所
  • TYPO3 Extbase如何清空ObjectStorage

    我想在更新对象时 清空 ObjectStorage 它是 TYPO3 4 6 带有 Extbase 扩展 允许您在前端显示 添加 编辑 删除数据集 乍一看一切看起来都不错 我有一个字段引用另一张表 TCA partner gt array
  • Fortran 77 续行[重复]

    这个问题在这里已经有答案了 所以我必须用 fortran77 和 f 文件扩展名编写这个程序 并且我不想使用选项来编译它 我想修复该错误 但由于某种原因 我尝试过的所有操作仍然给我这个错误 我已经包含了代码和错误终端输出 程序 p1 隐式无
  • Android getActivity() 在片段内总是返回 null

    我遇到了一个奇怪的问题 getActivity 方法always在片段内返回 null 我在 onAttach 和 onCreateView 完成运行后调用它 该片段位于包含片段堆栈的 FragmentActivity 内 我向其中添加片段