0

Ich habe ein Problem mit dem FragmentManager. Ich versuche eine Google Map in einem Fragment zu bekommen. Das ist mein Fragment. Ich möchte eine Karte für eine bestimmte Position machen com.google.android.gms mit: Play-Dienste: 9.2.1Fragmentmanager 2. Variable

>

import android.os.Bundle; 

import android.support.v4.app.FragmentActivity; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.spoturdeal.spoturdeal.R; 


public class MapShopsFragment extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapdeals); 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

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

     // Add a marker in Somewhere, and move the camera. 
     LatLng somewhere = new LatLng(51, 6); 
     mMap.addMarker(new MarkerOptions().position(somewhere).title("Marker in somewhere")); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(somewhere)); 
    } 
} 

Die MainActivity hat folgende Einfuhren

>

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Process; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.ActivityCompat; 
import android.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.content.ContextCompat; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 
import android.Manifest; 


import com.spoturdeal.spoturdeal.R; 
import com.spoturdeal.spoturdeal.fragments.MapShopsFragment; 

ich überprüft haben, dass ich verwende android.support.v4.app.FragmentActivity Der Code, der das Problem hat, ist dieser Teil

>

private void displayInitialFragment() { 

     MapShopsFragment mapShopsFragment = new MapShopsFragment(); 
     FragmentManager fragmentmanager = getSupportFragmentManager(); 
     fragmentmanager.beginTransaction() 
       .setCustomAnimations(R.anim.anim_slide_in_from_left, R.anim.anim_slide_out_from_left) 
       .replace(R.id.relativelayout_for_fragment, 
         mapShopsFragment,   /** here is the Problem 
         mapShopsfragment.getTag() 
       ).commit(); 

    } 

Die Fehlermeldung kann ich, wenn baut Fehler: (77, 25) Fehler: inkompatible Typen: MapShopsFragment nicht konvertiert werden können

Ich habe mehrere weitere Fragmente zu Fragment, das ich arbeite mit ihnen haben Probleme. Sie werden als ListFragments erweitert.

Ich möchte die Karte nicht in einer anderen Aktivität erstellen, da ich mein Material-Design-Menü darauf einstellen muss.

In der Statuszeile des Android Studio ich folgende Meldung

'replace(int, android.support.v4.app.Fragment)' in 'android.support.v4.app.FragmentTransaction' cannot be applied to '(int, com.spoturdeal.spoturdeal.fragments.MapShopsFragment)' but do not understand what is meant by it.

konnte ich das Fragment erhalten die Arbeit mit Hilfe von @ Ben bekommen die Karte arbeitet mit Play-Dienste erhalten: 9.2.1 war ein bisschen schwieriger. Unten ist die Lösung, die perfekt funktioniert hat.

>

public class MapShopsFragment extends Fragment implements OnMapReadyCallback { 


    private MapView mapView; 
    private GoogleMap googleMap; 

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

    } 
    public void onViewCreated(View v, Bundle savedInstanceState) { 

     mapView = (MapView) v.findViewById(R.id.map); 
     mapView.onCreate(savedInstanceState); 
     mapView.onResume(); 
     mapView.getMapAsync(this); 

    } 

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

Antwort

0

Das Problem ist Ihre Schaffung eines FragmentActivity kein Fragment. Der Fragmentmanager erwartet von Ihnen, dass Sie ein Support-Fragment übergeben. Für das, was Sie tun, muss MapShopsFragment Fragment erweitern.

+0

Mine MainActivity möchten nur den Import> com.spoturdeal.spoturdeal.fragments.MapShopsFragment; wenn ich hinzufügen, android.support.v4.app.Fragment; Es wird in grau sein – Charley57

+0

Ja, sorry, ich bin verwirrt. Siehe aktualisierte Antwort. – Ben

+0

Hallo Ben, danke für die Hilfe bisher. I Fragment scheint zu funktionieren. Aber jetzt bin ich nicht in der Lage, die Mapview richtig zu bekommen. Ich habe diesen Fehler> verursacht durch: java.lang.ClassCastException: android.widget.FrameLayout kann nicht in com.google.android.gms.maps.MapView umgewandelt werden – Charley57