2016-06-13 16 views
-1

verwendet wird Die onMapReady Funktion wird nie aufgerufen. Es muss für die korrekte Initialisierung meiner GoogleMap ausgelöst werden.OnMapReadyCallback wird nicht ausgelöst, wenn Fragment

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
    } 
} 

Sollte ich erben MapFragment statt Fragment? Weil ich einen anderen Fehler, wenn ich tun: es eine Nullpointer in MainActivity gibt

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 

public class MapsFragment extends Fragment implements OnMapReadyCallback { 

    private GoogleMap mMap; 

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

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
    } 
} 

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment android:name=".fragment.MapsFragment" 
     android:id="@+id/maps_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </fragment> 
</LinearLayout> 

activity_maps.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 

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

Vielen Dank Jungs!

Update 1: hinzugefügt, dies zu MapsActivity, aber jetzt MainActivity android.view.InflateException zurück: Binary XML-Datei Zeile # 6: Fehler aufblasen Klasse Fragment

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    SupportMapFragment supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 
    supportMapFragment.getMapAsync(this); 
} 

Antwort

0

Try This

public class MapsFragment extends Fragment implements OnMapReadyCallback { 

private GoogleMap mMap; 

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

    View mView = inflater.inflate(R.layout.activity_maps, container, false); 

    SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)); 

    mapFragment.getMapAsync(this); 
    return mView ; 

} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 
} 
} 
+0

SupportMapFragment "nicht erreichbar Aussage" –

+0

ich meine Antwort Edited Bitte überprüfen – mdDroid

1

Ihr MapsFragment sollte getMapAsync anfordern laden Karte dann nur onMapReady wird aufgerufen.

public class MapsFragment extends Fragment implements OnMapReadyCallback 
{ 
    private View fragmentView; 
    private GoogleMap mMap; 

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

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

     SupportMapFragment mapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 


    @Override 
    public void onMapReady(GoogleMap googleMap) 
    { 
     mMap = googleMap; 
    } 
} 
+0

gibt java.lang.RuntimeException: Kann Aktivität .MainActivity –

+0

posten Sie Ihre logcat Ausnahme starten –

0

hier ist die richtige, die Arbeitslösung:

MapsFragment

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 

public class MapsFragment extends SupportMapFragment { 

    private GoogleMap mapView; 

    private void initGoogleMap() { 
     getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       mapView = googleMap; 
      } 
     }); 

    } 

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

} 

MainActivity

public class MainActivity extends AppCompatActivity { 

    private MapsFragment mapsFragment; 

    private void initializeMapsFragment() { 
     FragmentTransaction mTransaction = getSupportFragmentManager().beginTransaction(); 
     mapsFragment = new MapsFragment(); 
     SupportMapFragment supportMapFragment = mapsFragment; 
     mTransaction.add(R.id.google_maps_frame, supportMapFragment); 
     mTransaction.commit(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     initializeMapsFragment(); 
    } 
} 

main_activity. xml, entfernt maps_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/google_maps_frame" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginBottom="-8dp" 
     android:layout_weight="0.2" > 
    </FrameLayout> 

</LinearLayout> 
Verwandte Themen