Как получить доступ к 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();
следующий код делает трюк для меня
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);