如何在片段中访问getSupportFragmentManager()?

DjP*_*DjP 139 android android-fragments android-fragmentactivity android-support-library fragmentmanager

我有一个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);
Run Code Online (Sandbox Code Playgroud)

Eld*_*abu 255

你可以直接打电话

getFragmentManager() 
Run Code Online (Sandbox Code Playgroud)

获取片段管理器.

要么

在你的片段中,

创建字段:

private FragmentActivity myContext;
Run Code Online (Sandbox Code Playgroud)

覆盖片段的onAttach方法:

@Override
public void onAttach(Activity activity) {
    myContext=(FragmentActivity) activity;
    super.onAttach(activity);
}
Run Code Online (Sandbox Code Playgroud)

当您需要获得支持片段管理器调用时:

FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
Run Code Online (Sandbox Code Playgroud)

要么

FragmentManager fragManager = myContext.getFragmentManager();
Run Code Online (Sandbox Code Playgroud)

你完成了.

  • 这是一个开销.请参阅下面的答案... getFragmentManager()实际上就是您所需要的. (11认同)
  • 这里不需要全局mContext变量,只需在代码中的任何地方使用getActivity()即可.请编辑您的答案,这样您就不会误导错误的方向. (4认同)
  • 当我第一次点击它的工作,但在那之后继续其他一些片段我点击它显示空白页面.. (3认同)
  • @Varundroid.我同意我们可以随时调用getFragmentManager()这一事实.如果您可以将您的电子邮件ID发送给我,我可以发送示例代码以证明getActivity()有机会返回null. (3认同)

Mar*_*ark 80

您需要做的就是使用

getFragmentManager()
Run Code Online (Sandbox Code Playgroud)

片段上的方法.当您在添加此片段时使用它时,它将为您提供支持片段管理器.

片段文档

  • 这应该是接受的答案,不建议按照第一个答案的建议保留对父活动的引用. (7认同)
  • 这将返回适当的FragmentManager.如果在android.support.app.v4.Fragment中,它将返回与Activity中的getSupportFragmentManager()方法相同的内容.在这种情况下调用该方法简单的getFragmentManager()的原因是因为它不是Ambigious,与Activity的情况不同. (5认同)
  • 这将返回android.app.Fragment.在某些情况下,您需要android.support.app.v4.Fragment,因此它不会一直有效. (3认同)

Var*_*oid 40

简单地说就是这样 -

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.
Run Code Online (Sandbox Code Playgroud)

要么

getActivity().getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud)

在你的Fragment的onActivityCreated()方法和onActivityCreated()之后调用的任何方法.

  • 我从各个方面深入研究了这些课程.似乎这是使用android.support.v4.app.Fragment的最佳解决方案 (2认同)

Ran*_*mar 13

Kotlin用户尝试这个答案

(activity as AppCompatActivity).supportFragmentManager
Run Code Online (Sandbox Code Playgroud)

  • 你把这个放在这里好,否则它会让我疯狂Ty (3认同)
  • 我只是使用`childFragmentManager`而工作 (2认同)

bsa*_*ner 11

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

   map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
                    .getMap();
Run Code Online (Sandbox Code Playgroud)

这将在片段内部使用时获取地图.


Van*_*hel 9

在java中你可以替换为

getChildFragmentManager()
Run Code Online (Sandbox Code Playgroud)

在 kotlin 中,通过

childFragmentManager
Run Code Online (Sandbox Code Playgroud)

希望它有帮助:)


cha*_*lee 9

getFragmentManager()已被弃用,以明确getParentFragmentManager()您想要访问父片段而不是任何子片段的片段管理器。

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


Aki*_*nka 7

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

例如。

FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
Run Code Online (Sandbox Code Playgroud)

  • `((AppCompatActivity) mContext)` 部分正是我正在寻找的 ** 完全**。谢谢! (2认同)

Rez*_*eza 7

在 kotlin 中执行此操作的简单新方法

requireActivity().supportFragmentManager
Run Code Online (Sandbox Code Playgroud)


Emi*_*uez 6

您可以getActivity().getSupportFragmentManager()随时使用getSupportFragmentManager.

层次结构是Activity - > fragment.fragment不能直接调用getSupportFragmentManger,但Activity可以.因此,您可以使用getActivity来调用片段所在的当前活动并获取getSupportFragmentManager()