我如何在一个片段中访问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);
303801 次浏览

您可以直接拨打

getParentFragmentManager()

获取片段管理器。注意,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()。

试试这个:

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

你可以在任何时候使用getActivity().getSupportFragmentManager()来获取supportfragmentmanager。

层级是Activity ->片段。fragment不能直接调用getSupportFragmentManger,但是Activity可以。因此,你可以使用getActivity来调用片段所在的当前活动并获得getSupportFragmentManager()

如果你有这个问题,并且是在API级别21+做这个:

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

这将在片段中使用时获得映射。

我的父活动扩展了AppCompatActivity,所以我不得不将我的上下文转换为AppCompatActivity而不仅仅是Activity。

如。

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

你可以简单地访问

Context mContext;


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


mContext = getActivity();


}

然后使用

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

在你的片段中这样做吗

getActivity().getSupportFragmentManager()

getSupportFragmentManager()当你在活动中,想要获得一个片段,但在片段中你可以访问时使用

getSupportFragmentManager()

通过使用另一个名为getFragmentMangaer()的方法,工作原理与getSupportFragmentManager()相同,你可以像以前那样使用它:

fragmentTransaction =getFragmentManager().beginTransaction();

Kotlin用户尝试这个答案

(activity as AppCompatActivity).supportFragmentManager

下面的代码为我完成了这个任务

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

这对我来说很有效。

再看一下在这里。

((AppCompatActivity) getActivity()).getSupportFragmentManager()

你可以在Fragments中使用childFragmentManager。

一些Kotlin代码在Fragment中使用supportFragmentManager。

  override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?


): View? {


super.onCreateView(inflater, container, savedInstanceState)
val rootView = inflater.inflate(R.layout.fragment_home, container, false)


// ....


if (rootView.home_play_btn != null) {


rootView.home_play_btn.setOnClickListener {
val fragment: BaseFragment = ListFragment.newInstance()
val fragManager: FragmentManager = (activity as AppCompatActivity).supportFragmentManager
fragManager.beginTransaction()
.replace(R.id.content_home_frame, fragment, TAG).commit()


}

在Java中,你可以用

getChildFragmentManager()

在kotlin中,通过使其简单

childFragmentManager

希望能有所帮助:)

在kotlin中实现它的简单新方法

requireActivity().supportFragmentManager

getFragmentManager()已被弃用,而改用getParentFragmentManager(),以清楚地表明你想访问父片段的片段管理器,而不是任何子片段。

只需在Java中使用getParentFragmentManager()或在Kotlin中使用parentFragmentManager即可。

在片段中获取fragmentManager的最佳方法是调用新方法

getParentFragmentManager()

或者在kotlin文件中使用属性访问语法

parentFragmentManager

这指定了将要加载的fragmentManager(在子片段和父片段之间选择)

我使用这段代码,它的工作:

val profileFragment = ProfileFragment()
val fragmentManager = parentFragmentManager
fragmentManager.beginTransaction().apply {
replace(R.id.fragment_main, profileFragment, ProfileFragment::class.java.simpleName)
addToBackStack(null)
commit()

R.id.fragment_main是你使用的主布局。如果你使用main activity,那么你可以给布局id。

如果您在活动中使用片段管理器

getSupportFragmentManager()


supportFragmentManager

如果你在片段中使用片段管理器

childFragmentManager

这个工作对我来说,你也可以试试这个。

  getParentFragmentManager()  

or it may be

  parentFragmentManager