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

13 ответов


вы можете напрямую позвонить

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

вы сделали.


все, что вам нужно сделать-это с помощью

getFragmentManager()

метод на вашем фрагменте. Он даст вам менеджер фрагментов поддержки, когда вы использовали его при добавлении этого фрагмента.

Фрагмент Документации


просто получить его, как это -

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

в методе Onactivitycreated () вашего фрагмента и любом методе, который вызывается после onActivityCreated ().


пользователи Kotlin попробуйте этот ответ

(activity as AppCompatActivity).supportFragmentManager

если у вас есть эта проблема и на уровне API 21+ этого:

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

это получит карту при использовании внутри фрагмента.


можно использовать getActivity().getSupportFragmentManager() в любое время вы хотите getSupportFragmentManager.

иерархия-это активность - > фрагмент. фрагмент не способен напрямую вызывать getSupportFragmentManger, но Activity может . Таким образом, вы можете использовать getActivity для вызова текущей активности, в которой находится фрагмент, и получить getSupportFragmentManager()


моя родительская активность расширяет AppCompatActivity, поэтому мне пришлось привести свой контекст к AppCompatActivity вместо просто Activity.

например.

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

сделайте это в своем фрагменте

getActivity().getSupportFragmentManager()

getActivity().getFragmentManager() Это сработало или я.

посмотрите здесь.


Вы можете просто получить доступ, как

Context mContext;

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

mContext = getActivity();

}

и затем использовать

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

попробуйте это:

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

getSupportFragmentManager() используется, когда вы находитесь в активность и хотите получить фрагмент, Но фрагмент вы можете получить доступ к

getSupportFragmentManager()

С помощью другого метода под названием getFragmentMangaer() работает так же, как getSupportFragmentManager() и вы можете использовать его, как вы привыкли:

fragmentTransaction =getFragmentManager().beginTransaction();

следующий код делает трюк для меня

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