Как я могу получить доступ к getSupportFragmentManager() в фрагменте?
У меня есть 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);
Ответы
Ответ 1
Вы можете напрямую позвонить
getFragmentManager()
чтобы получить менеджер фрагментов.
или
В вашем фрагменте
Создать поле:
private FragmentActivity myContext;
переопределить метод onAttach вашего фрагмента:
@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}
Когда вам нужно получить вызов диспетчера фрагментов поддержки:
FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
или
FragmentManager fragManager = myContext.getFragmentManager();
Вы закончили.
Ответ 2
Все, что вам нужно сделать, это использовать
getFragmentManager()
на вашем фрагменте. Он предоставит вам менеджер фрагментов поддержки, когда вы его использовали при добавлении этого фрагмента.
Фрагментная документация
Ответ 3
Просто сделайте это так:
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().
Ответ 4
Пользователи Kotlin используют этот ответ
(activity as AppCompatActivity).supportFragmentManager
Ответ 5
Если у вас есть эта проблема и вы находитесь на уровне api 21+, выполните следующие действия:
map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
.getMap();
это приведет к отображению карты при использовании внутри фрагмента.
Ответ 6
Вы можете использовать getActivity().getSupportFragmentManager()
в любое время, когда хотите получитьSupportFragmentManager.
Иерархия - это фрагмент Activity → . фрагмент не способен напрямую вызвать getSupportFragmentManger, но Activity может. Таким образом, вы можете использовать getActivity для вызова текущей активности, в которой находится фрагмент, и получить getSupportFragmentManager()
Ответ 7
My Parent Activity расширяет AppCompatActivity, поэтому мне пришлось включить мой контекст в AppCompatActivity, а не только в Activity.
например.
FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
Ответ 8
сделайте это в своем фрагменте
getActivity().getSupportFragmentManager()
Ответ 9
getActivity().getFragmentManager()
Это сработало или у меня.
Также посмотрите на здесь.
Ответ 10
((AppCompatActivity) getActivity()).getSupportFragmentManager()
Ответ 11
Вы можете просто получить доступ, например
Context mContext;
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
}
а затем используйте
FragmentManager fm = ((FragmentActivity) mContext)
.getSupportFragmentManager();
Ответ 12
Следующий код помогает мне
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
Ответ 13
getSupportFragmentManager()
используется, когда вы находитесь в действии и хотите получить фрагмент, но во фрагменте, доступ к которому вы можете получить
getSupportFragmentManager()
с помощью другого метода, называемого getFragmentMangaer()
, работает так же, как getSupportFragmentManager()
, и вы можете использовать его, как вы привыкли:
fragmentTransaction =getFragmentManager().beginTransaction();
Ответ 14
Вы можете использовать childFragmentManager внутри Fragments.
Ответ 15
Попробуйте следующее:
private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());