J'ai un FragmentActivity et je veux utiliser un fragment de carte en son sein. Je ne parviens pas à obtenir le gestionnaire de fragments de support pour y accéder.
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);
Vous pouvez appeler directement
getFragmentManager()
pour obtenir le gestionnaire de fragments.
ou
Dans ton fragment,
Créer un champ:
private FragmentActivity myContext;
redéfinissez la méthode onAttach de votre fragment:
@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}
Lorsque vous avez besoin d'appeler le gestionnaire de fragments de support:
FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
ou
FragmentManager fragManager = myContext.getFragmentManager();
Vous avez terminé.
Tout ce que vous devez faire est d'utiliser
getFragmentManager()
méthode sur votre fragment. Il vous donnera le gestionnaire de fragments de support, lorsque vous l'avez utilisé lors de l'ajout de ce fragment.
Obtenez-le simplement comme ça -
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.
OU
getActivity().getSupportFragmentManager();
dans la méthode onActivityCreated () de votre fragment et dans toute méthode appelée après onActivityCreated ().
Les utilisateurs de Kotlin essaient cette réponse
(activity as AppCompatActivity).supportFragmentManager
si vous avez ce problème et que vous êtes au niveau 21+, faites ceci:
map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
.getMap();
la carte sera utilisée si elle est utilisée à l'intérieur d'un fragment.
Vous pouvez utiliser getActivity().getSupportFragmentManager()
à tout moment pour obtenir getSupportFragmentManager.
la hiérarchie est Activité -> fragment. fragment n'est pas capable d'appeler directement getSupportFragmentManger mais Activity peut le faire. Ainsi, vous pouvez utiliser getActivity pour appeler l’activité en cours dans laquelle se trouve le fragment et obtenir getSupportFragmentManager()
.
Mon activité parent étend AppCompatActivity et j'ai donc dû transtyper mon contexte en AppCompatActivity au lieu de simplement Activity.
par exemple.
FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
fais ceci dans ton fragment
getActivity().getSupportFragmentManager()
((AppCompatActivity) getActivity()).getSupportFragmentManager()
getActivity().getFragmentManager()
Cela a fonctionné ou moi.
Regardez aussi ici.
Vous pouvez simplement accéder comme
Context mContext;
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
}
et ensuite utiliser
FragmentManager fm = ((FragmentActivity) mContext)
.getSupportFragmentManager();
Vous pouvez utiliser childFragmentManager dans Fragments.
Le code suivant fait le tour pour moi
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
getSupportFragmentManager()
utilisé lorsque vous êtes en activité et que vous voulez obtenir un fragment, mais vous pouvez y accéder.
getSupportFragmentManager()
en utilisant une autre méthode appelée getFragmentMangaer()
fonctionne de la même manière que getSupportFragmentManager()
et vous pouvez l’utiliser comme vous le faisiez auparavant:
fragmentTransaction =getFragmentManager().beginTransaction();