【问题标题】:SupportMapFragment cannot be added to FrameLayoutSupportMapFragment 无法添加到 FrameLayout
【发布时间】:2017-02-01 12:54:04
【问题描述】:

我在类似 Activity 的 onCreate 中将 mapFragment 添加到 FrameLayout 中

getSupportFragmentManager().beginTransaction()
                .replace(R.id.frame_container,//where frame_container is a FrameLayout
                 new MapyFragment(),
                 MapyFragment.class.getSimpleName()).commit();

frame_container 是 FrameLayout

MapyFragment.class

public class MapyFragment extends Fragment {

    private SupportMapFragment supportMapFragment;
    private GoogleMap map;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setRetainInstance(true);
        setHasOptionsMenu(true);

        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_mapy, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        FragmentManager fm = getChildFragmentManager();/// getActivity().getSupportFragmentManager();/// getChildFragmentManager();
        supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
        if (supportMapFragment == null) {
            supportMapFragment = SupportMapFragment.newInstance();
            fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit();
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        if (supportMapFragment != null) {
            supportMapFragment.getMapAsync(new OnMapReadyCallback() {

                @Override
                public void onMapReady(GoogleMap googleMap) {
                    map = googleMap;
                    map.animateCamera(CameraUpdateFactory.zoomTo(15));
                }
            });
        }
    }
}

我尝试使用 getChildFragmentManager 和 getActivity.getSupportFragmentManager() 进行更改。

谷歌地图不显示。没有崩溃,我做错了什么。请澄清并

以及为什么我们必须使用 fragmentManger 来获取我们的 map_container。见

fm.findFragmentById(R.id.map_container);

fragment_mapy.xml

<fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/map_container"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="40dp"
        map:uiZoomControls="true" />

【问题讨论】:

    标签: android google-maps android-fragments


    【解决方案1】:

    试试这个:

    onCreateview 中初始化您的supportMapFragment

     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        super.onCreateView(inflater, container, savedInstanceState);
        View rootView = inflater.inflate(R.layout.activity_map, container, false);
        smp = (SupportMapFragment) this.getChildFragmentManager().findFragmentById(R.id.map);
        smp.getMapAsync(this);
        retrun rootView;
    }
    
    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;
    }
    

    在布局xml中:

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    也可以在这里阅读SupportMapFragment

    【讨论】:

      【解决方案2】:

      解决我自己的问题

      首先没有区别 b/w android:nameandroid:class 都可以正常工作。 See this

      getChildFragmentManager() 是罪魁祸首。

      最新的工人阶级

      public class MapyFragment extends Fragment implements OnMapReadyCallback {
      
          private SupportMapFragment supportMapFragment;
          private GoogleMap map;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              setRetainInstance(true);
              setHasOptionsMenu(true);
              super.onCreate(savedInstanceState);
          }
      
          @Nullable
          @Override
          public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
              return inflater.inflate(R.layout.fragment_mapy,container,false);
          }
      
          @Override
          public void onActivityCreated(@Nullable Bundle savedInstanceState) {
              super.onActivityCreated(savedInstanceState);
      
              FragmentManager fm = getActivity().getSupportFragmentManager();/// getChildFragmentManager();
              supportMapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map_container);
              if (supportMapFragment == null) {
                  supportMapFragment = SupportMapFragment.newInstance();
                  fm.beginTransaction().replace(R.id.map_container, supportMapFragment).commit();
              }
          }
      
          @Override
          public void onMapReady(GoogleMap googleMap) {
              map = googleMap;
              map.animateCamera(CameraUpdateFactory.zoomTo(15));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多