我如何在片段扩展的 class 中使用 getSupportFragmentManager()?

How can i use getSupportFragmentManager() in a class extended by fragment?

我有一个 class 是从片段扩展而来的...我想使用 getSupportFragmentManager() 来查找地图片段... 这是片段 xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="myproject.BlankFragment">

<!-- TODO: Update blank fragment layout -->
<TextView android:layout_width="match_parent" android:layout_height="match_parent"
    android:text="this is ths map " />

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:id="@+id/mapFrag"
    tools:context="pk.edu.riu.mrcab.mrcabv1.MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    />

这是片段class

public class BlankFragment extends Fragment {
private GoogleMap mMap; 

public BlankFragment() {

}


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

    View rootView = inflater.inflate(R.layout.fragment_blank, container, false);

    return rootView;
}
private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();

        if (mMap != null) {
        }
    }
}

每当您尝试访问嵌套片段时,都应调用 getChildFragmentManager() 而不是 getSupportFragmentManager()。请注意,除非您支持 API 17+.

,否则您应该使用支持库 Fragment

你试过了吗

FragmentManager fm = getActivity().getSupportFragmentManager();
// and then depending on your case
fm.findFragmentById(R.id.yourId);
// or
fm.findFragmentByTag("YOUR_TAG");
// or
fm.getFragments(); // and then search the right one

这是我通常做的方式。

使用这个

private FragmentActivity myContext;

覆盖片段的 onAttach 方法:

@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}

并在需要时调用此方法

FragmentManager fragManager = myContext.getSupportFragmentManager(); //if lib you are using is support v4

或使用

FragmentManager fragManager = myContext.getFragmentManager();

否则你可以直接调用这个方法

getFragmentManager()