How can I access getSupportFragmentManager() in a fragment?

AndroidAndroid FragmentsAndroid Support-LibraryAndroid FragmentactivityFragmentmanager

Android Problem Overview


I have a FragmentActivity and I want to use a map fragment within it. I'm having a problem getting the support fragment manager to access it.

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






	

Android Solutions


Solution 1 - Android

You can directly call

getParentFragmentManager()  

to get the fragment manager. Note that getFragmentManager() also works but has been marked as deprecated.

Solution 2 - Android

All you need to do is using

getFragmentManager()

method on your fragment. It will give you the support fragment manager, when you used it while adding this fragment.

Fragment Documentation

Solution 3 - Android

Simply get it like this -

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.

OR

getActivity().getSupportFragmentManager();

in your Fragment's onActivityCreated() method and any method that is being called after onActivityCreated().

Solution 4 - Android

Kotlin users try this answer

(activity as AppCompatActivity).supportFragmentManager

Solution 5 - Android

if you have this problem and are on api level 21+ do this:

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

this will get the map when used inside of a fragment.

Solution 6 - Android

The simple new way of doing it in kotlin

requireActivity().supportFragmentManager

Solution 7 - Android

in java you can replace with

getChildFragmentManager()

in kotlin, make it simple by

childFragmentManager

hope it help :)

Solution 8 - Android

getFragmentManager() has been deprecated in favor of getParentFragmentManager() to make it clear that you want to access the fragment manager of the parent instead of any child fragments.

Simply use getParentFragmentManager() in Java or parentFragmentManager in Kotlin.

Solution 9 - Android

My Parent Activity extends AppCompatActivity so I had to cast my context to AppCompatActivity instead of just Activity.

eg.

FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();

Solution 10 - Android

You can use getActivity().getSupportFragmentManager() anytime you want to getSupportFragmentManager.

hierarchy is Activity -> fragment. fragment is not capable of directly calling getSupportFragmentManger but Activity can . Thus, you can use getActivity to call the current activity which the fragment is in and get getSupportFragmentManager()

Solution 11 - Android

((AppCompatActivity) getActivity()).getSupportFragmentManager()

Solution 12 - Android

do this in your fragment

getActivity().getSupportFragmentManager()

Solution 13 - Android

getActivity().getFragmentManager() This worked or me.

Also take a look at here.

Solution 14 - Android

The following code does the trick for me

 SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
    mapFragment.getMapAsync(this);

Solution 15 - Android

You can use childFragmentManager inside Fragments.

Solution 16 - Android

You can simply access like

Context mContext;

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

mContext = getActivity();

}

and then use

FragmentManager fm = ((FragmentActivity) mContext)
                        .getSupportFragmentManager();

Solution 17 - Android

Some Kotlin code to use supportFragmentManager inside a Fragment.

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

      }

Solution 18 - Android

Try this:

private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());

Solution 19 - Android

getSupportFragmentManager() used when you are in activity and want to get a fragment but in the fragment you can access

getSupportFragmentManager()

by use another method called getFragmentMangaer() works the same like getSupportFragmentManager() and you can use it like you used to:

fragmentTransaction =getFragmentManager().beginTransaction();
           

Solution 20 - Android

Best way to get fragmentManager inside of a fragment is to call the new method

getParentFragmentManager()

or use the property access syntax in kotlin files

parentFragmentManager

this specifies the fragmentManager that is to be loaded (choosing between child and parent fragments )

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDjPView Question on Stackoverflow
Solution 1 - AndroidEldhose M BabuView Answer on Stackoverflow
Solution 2 - AndroidMarkView Answer on Stackoverflow
Solution 3 - AndroidVarundroidView Answer on Stackoverflow
Solution 4 - AndroidRanjithkumarView Answer on Stackoverflow
Solution 5 - AndroidbsautnerView Answer on Stackoverflow
Solution 6 - AndroidRezaView Answer on Stackoverflow
Solution 7 - AndroidVanya RachelView Answer on Stackoverflow
Solution 8 - AndroidcharleeView Answer on Stackoverflow
Solution 9 - AndroidAkinola OlayinkaView Answer on Stackoverflow
Solution 10 - AndroidEmil Reña EnriquezView Answer on Stackoverflow
Solution 11 - AndroidDiako HasaniView Answer on Stackoverflow
Solution 12 - Androidphilip mudenyoView Answer on Stackoverflow
Solution 13 - AndroidAravindh GopiView Answer on Stackoverflow
Solution 14 - AndroidolajideView Answer on Stackoverflow
Solution 15 - AndroidKishan SolankiView Answer on Stackoverflow
Solution 16 - AndroidAshwini.patilView Answer on Stackoverflow
Solution 17 - AndroidnoelmcloughlinView Answer on Stackoverflow
Solution 18 - AndroidMaddyView Answer on Stackoverflow
Solution 19 - AndroidMohamed AyedView Answer on Stackoverflow
Solution 20 - AndroidAustine GwaView Answer on Stackoverflow