188

我有一个 FragmentActivity,我想在其中使用地图片段。我在让支持片段管理器访问它时遇到问题。

 if (googleMap == null) {
            googleMap = ((SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map1)).getMap();

            // check if map is created successfully or not
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }

            // create marker
            MarkerOptions marker = new MarkerOptions().position(
                    new LatLng(latitude, longitude)).title("Hello Maps ");

            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(new LatLng(latitude, longitude)).zoom(15).build();

            googleMap.animateCamera(CameraUpdateFactory
                    .newCameraPosition(cameraPosition));

            // adding marker
            googleMap.addMarker(marker);
4

20 回答 20

310

您可以直接调用

getParentFragmentManager()  

获取片段管理器。请注意,getFragmentManager()也可以使用,但已被标记为已弃用。

于 2013-11-27T08:51:37.807 回答
86

您需要做的就是使用

getFragmentManager()

片段上的方法。当您在添加此片段时使用它时,它将为您提供支持片段管理器。

片段文档

于 2013-11-27T09:00:14.113 回答
52

像这样简单地得到它 -

getFragmentManager() // This will also give you the SupportFragmentManager or FragmentManager based on which Fragment class you have extended - android.support.v4.app.Fragment OR android.app.Fragment.

或者

getActivity().getSupportFragmentManager();

在您的 Fragment 的 onActivityCreated() 方法和在 onActivityCreated() 之后调用的任何方法中。

于 2014-07-04T02:48:48.207 回答
20

Kotlin 用户尝试这个答案

(activity as AppCompatActivity).supportFragmentManager
于 2017-09-21T08:26:09.013 回答
15

如果您遇到此问题并且在 api 级别 21+ 上,请执行以下操作:

   map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
                    .getMap();

这将在片段内部使用时获得地图。

于 2016-02-16T19:50:06.863 回答
11

在java中你可以替换为

getChildFragmentManager()

在 kotlin 中,通过

childFragmentManager

希望它有帮助:)

于 2020-02-28T07:45:33.847 回答
11

在 kotlin 中做这件事的简单新方法

requireActivity().supportFragmentManager
于 2020-06-01T18:39:30.127 回答
8

getFragmentManager()已被弃用,getParentFragmentManager()以表明您希望访问父片段的片段管理器而不是任何子片段。

只需getParentFragmentManager()在 Java 或parentFragmentManagerKotlin 中使用。

于 2021-02-01T16:43:10.843 回答
7

我的父 Activity 扩展了 AppCompatActivity,因此我必须将上下文转换为 AppCompatActivity 而不仅仅是 Activity。

例如。

FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
于 2016-07-04T16:07:11.913 回答
6

您可以getActivity().getSupportFragmentManager()随时使用您想要的 getSupportFragmentManager。

层次结构是活动-> 片段。fragment 不能直接调用 getSupportFragmentManger 但 Activity 可以。因此,您可以使用 getActivity 调用片段所在的当前活动并获取getSupportFragmentManager()

于 2015-01-30T02:55:12.653 回答
4
((AppCompatActivity) getActivity()).getSupportFragmentManager()
于 2019-05-25T09:22:06.790 回答
3

在您的片段中执行此操作

getActivity().getSupportFragmentManager()
于 2017-05-27T17:28:27.443 回答
3

getActivity().getFragmentManager()这对我有用。

也看看这里。

于 2018-04-27T18:17:25.400 回答
2

您可以在 Fragments 中使用 childFragmentManager。

于 2019-07-19T10:02:19.977 回答
2

以下代码对我有用

 SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
    mapFragment.getMapAsync(this);
于 2018-03-07T22:43:00.780 回答
1

您可以简单地访问

Context mContext;

public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

mContext = getActivity();

}

然后使用

FragmentManager fm = ((FragmentActivity) mContext)
                        .getSupportFragmentManager();
于 2016-12-29T10:47:34.653 回答
1

在 Fragment 中使用 supportFragmentManager 的一些 Kotlin 代码。

  override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?

  ): View? {

    super.onCreateView(inflater, container, savedInstanceState)
    val rootView = inflater.inflate(R.layout.fragment_home, container, false)

    // ....

    if (rootView.home_play_btn != null) {

      rootView.home_play_btn.setOnClickListener {
        val fragment: BaseFragment = ListFragment.newInstance()
        val fragManager: FragmentManager = (activity as AppCompatActivity).supportFragmentManager
        fragManager.beginTransaction()
            .replace(R.id.content_home_frame, fragment, TAG).commit()

      }
于 2020-01-09T00:13:18.980 回答
0

尝试这个:

private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());
于 2014-07-17T09:07:20.147 回答
0

getSupportFragmentManager()当您处于活动状态并想要获取片段但在片段中您可以访问时使用

getSupportFragmentManager()

通过使用另一种称为getFragmentMangaer()工作方式相同的方法getSupportFragmentManager(),您可以像以前一样使用它:

fragmentTransaction =getFragmentManager().beginTransaction();
于 2017-08-15T05:06:02.403 回答
0

在片段中获取片段管理器的最佳方法是调用新方法

getParentFragmentManager()

或在 kotlin 文件中使用属性访问语法

parentFragmentManager

这指定要加载的片段管理器(在子片段和父片段之间选择)

于 2021-12-16T08:20:54.160 回答