首页 > 解决方案 > 是什么导致 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 依赖项!将我的复制到他的破坏了他的,并将他的复制到我的修复了我的。所以现在我可以更多地研究依赖关系。

有线索的感觉好多了!

标签: javaandroidandroid-fragmentsdeprecated

解决方案


作为 FragmentPagerAdapter 构造函数的第二个参数,您必须显式传递行为类型。利用super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)

注意:查看有关 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 的 JavaDocs

表示只有当前片段将处于 {@link Lifecycle.State#RESUMED} * 状态。所有其他片段的上限为 {@link Lifecycle.State#STARTED}。


推荐阅读