我如何在片段扩展的 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()
我有一个 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()