我有一个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);

当前回答

我使用这段代码,它的工作:

val profileFragment = ProfileFragment()
val fragmentManager = parentFragmentManager
fragmentManager.beginTransaction().apply {
                            replace(R.id.fragment_main, profileFragment, ProfileFragment::class.java.simpleName)
                            addToBackStack(null)
                            commit()

R.id.fragment_main是你使用的主布局。如果你使用main activity,那么你可以给布局id。

其他回答

你所需要做的就是使用

getFragmentManager()

方法。它会给你支持片段管理器,当你在添加这个片段时使用它。

文档片段

你可以使用getActivity().getSupportFragmentManager()任何时候你想要得到supportfragmentmanager。

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

Kotlin用户尝试这个答案

(activity as AppCompatActivity).supportFragmentManager

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

  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()

      }

在你的片段中这样做吗

getActivity().getSupportFragmentManager()