问题
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);
回答1:
You can directly call
getFragmentManager()
to get the fragment manager.
or
In your fragment,
Create field :
private FragmentActivity myContext;
override onAttach method of your fragment :
@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}
When you need to get Support fragment manager call :
FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
or
FragmentManager fragManager = myContext.getFragmentManager();
You are done.
回答2:
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
回答3:
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().
回答4:
Kotlin users try this answer
(activity as AppCompatActivity).supportFragmentManager
回答5:
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.
回答6:
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()
回答7:
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();
回答8:
do this in your fragment
getActivity().getSupportFragmentManager()
回答9:
getActivity().getFragmentManager()
This worked or me.
Also take a look at here.
回答10:
The following code does the trick for me
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
回答11:
((AppCompatActivity) getActivity()).getSupportFragmentManager()
回答12:
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();
回答13:
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();
回答14:
You can use childFragmentManager inside Fragments.
回答15:
Try this:
private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());
来源:https://stackoverflow.com/questions/20237531/how-can-i-access-getsupportfragmentmanager-in-a-fragment