Как я могу получить доступ к 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().
если у вас есть эта проблема и вы находитесь на уровне 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().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();