2017-02-01 1 views
0

I MapFragment zu FrameLayout in onCreate einer Aktivität wieSupportMapFragment nicht zu FrameLayout hinzugefügt werden

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

und frame_container ist ein 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)); 
       } 
      }); 
     } 
    } 
} 
hinzugefügt haben

Ich habe versucht, mit getChildFragmentManager und getActivity.getSupportFragmentManager() zu ändern.

Google Karte wird nicht angezeigt. Kein Absturz, Was mache ich falsch? Bitte klären Sie und

Und warum müssen wir FragmentManger verwenden, um unsere map_container zu bekommen. Siehe

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" /> 

Antwort

0

try this:

initialisieren Ihre supportMapFragment in onCreateview.

@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; 
} 

in xml Layout:

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

Auch über SupportMapFragment hier

+0

rafsanahmand007 Ich schätze Ihre Bemühungen. – Nepster

0

Lösung für mein eigenes Problem

Zunächst einmal lesen gibt es keinen Unterschied b/wandroid:name & android:class funktionieren beide gut. See this

getChildFragmentManager() ist der Schuldige.

Neueste Arbeiterklasse

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)); 
    } 
} 
Verwandte Themen