Как я могу получить доступ к 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());