是什么导致 Android Studio 将 FragmentManager 标记为已弃用?

What causes Android Studio to flag the FragmentManager as deprecated?

我正在参加 Android 基础知识的 Udacity 纳米学位课程。我在Tour Guide App项目中,需要ViewPager、TabLayout和Fragments。

当我按照各种教程和示例进行操作时,我创建了一个 TestAdapter.java class。开头是这样的:

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" 并且悬停文本表示片段管理器已弃用。

我尝试过各种导入。我尝试过不同的构造函数。我一直陷入僵局,很明显我对片段和片段管理器的工作方式存在根本性的误解。

我去了YouTube,找到了一个学生做了一个功能性的导游应用程序,并得到了一份他的代码来学习。在他的 Adapter class 中,他有和我一样的导入,他和我有基本相同的代码,但他的 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

Indicates that only the current fragment will be in the {@link Lifecycle.State#RESUMED} * state. All other Fragments are capped at {@link Lifecycle.State#STARTED}.