java - 是什么导致 Android Studio 将 FragmentManager 标记为已弃用?
问题描述
我正在为 Android Basics 学习 Udacity 纳米学位课程。我在 Tour Guide App 项目中,该项目需要 ViewPager、TabLayout 和 Fragments。
当我遵循各种教程和示例时,我创建了一个 TestAdapter.java 类。开头是这样的:
package com.example.android.tourguide001;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
public class TestAdapter extends FragmentPagerAdapter {
public TestAdapter(FragmentManager fm) {
super(fm);
}
}
“super(fm);”这一行 通过“super”有一行,hovertext 说片段管理器已被弃用。
我尝试过各种进口。我尝试了不同的构造函数。我一直陷入僵局,很明显我对 Fragment 和 Fragment Managers 的工作方式存在根本性的误解。
我去了 YouTube,找到了一个学生,他做了一个功能性的导游应用程序,并得到了他的代码副本来学习。在他的 Adapter 类中,他的导入与我的相同,并且他的代码与我的基本相同,但他的 Fragment Manger 并未被弃用。
在这种情况下,他的代码是:
package com.example.tourguideapp;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
public class ViewAdapterPage extends FragmentPagerAdapter {
public ViewAdapterPage(FragmentManager fm)
{
super(fm);
}
}
我无法弄清楚他的应用程序和我的应用程序之间有什么区别。谁能解释弃用错误是如何工作的,以及在这种情况下会发生什么?
编辑:感谢您的帮助!答案是...
...在应用程序中构建 gradle 依赖项!将我的复制到他的破坏了他的,并将他的复制到我的修复了我的。所以现在我可以更多地研究依赖关系。
有线索的感觉好多了!
解决方案
作为 FragmentPagerAdapter 构造函数的第二个参数,您必须显式传递行为类型。利用super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
注意:查看有关 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 的 JavaDocs
表示只有当前片段将处于 {@link Lifecycle.State#RESUMED} * 状态。所有其他片段的上限为 {@link Lifecycle.State#STARTED}。
推荐阅读
- blockchain - 我可以使用元组作为映射的键吗?
- python - 如何使用 Selenium 和 Firefox 找到 options.add_argument("xxxxx") 的参数列表?
- sybase - 如何将 JOOQ 的 insertInto 与多个值一起使用?(Sybase 数据库)
- http - 在Http get request dart flutter中发送一个json对象作为参数
- javascript - 用历史推送替换 URL
- swift - 枚举类型:Int / 枚举“case”声明中逗号后的预期标识符
- c - 如何在 C 中不使用“dirent.h”(visual studio 2017 windows)在特定目录中查找所有文件名
- c++ - 如何使用 OpenCV 3 和 Tesseract/模板匹配识别图像中的旋转数字?
- python - 用阿拉伯字符绘制直方图
- python - 提高 Pandas pivot_table 中的调和平均效率