31

我正在尝试在使用 androidX 的应用程序中进行设置。

我的问题是,当我尝试使用 PlaceAutocompleteFragment 时出现错误,因为它是来自的片段,android.app.fragment而我的父片段是 androidx 片段:androidx.fragment.app.Fragment所以它使用 aandroidx.fragment.app.FragmentManager而不是 a android.app.FragmentManager

如何在 androidX 中使用“旧”片段?

4

3 回答 3

36
  1. 将此添加到依赖项: implementation 'androidx.appcompat:appcompat:1.0.2'.
  2. 添加这个:import androidx.fragment.app.FragmentTransaction;
  3. 将您的活动范围从 切换ActivityAppCompatActivity
  4. 从 更改getFragmentManager()getSupportFragmentManager()

这将解决您的问题。

于 2018-11-24T14:00:42.293 回答
13

如果您使用的是新库,则只使用这些库,不要将它们组合在一起,因为您可能会遇到更多问题。现在对于您的问题,转到您的片段并更改导入表单:

import android.app.fragment

至:

import androidx.fragment.app.Fragment

那应该可以解决您的问题。

于 2018-09-13T13:47:16.490 回答
4

不需要FragmentManager直接从中获取,因为在被调用Activity中提供了替换方法:FragmentgetParentFragmentManager

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

从已弃用的文档中getFragmentManager

 * @deprecated This has been removed in favor of <code>getParentFragmentManager()</code> which
 * throws an {@link IllegalStateException} if the FragmentManager is null. Check if
 * {@link #isAdded()} returns <code>false</code> to determine if the FragmentManager is
 * <code>null</code>.

替换方法的文档getParentFragmentManager

 * Return the FragmentManager for interacting with fragments associated
 * with this fragment's activity.  Note that this will available slightly
 * before {@link #getActivity()}, during the time from when the fragment is
 * placed in a {@link FragmentTransaction} until it is committed and
 * attached to its activity.
 *
 * <p>If this Fragment is a child of another Fragment, the FragmentManager
 * returned here will be the parent's {@link #getChildFragmentManager()}.
 *
 * @throws IllegalStateException if not associated with a transaction or host.

只需注意检查isAdded以确保FragmentManager不为空。

于 2020-01-31T10:51:33.167 回答