简体   繁体   中英

Google Maps not showing in fragment within pager adapter

Attempting to integrate code into app on 3rd page. Using a pager adapter. Can access page, but not map. Only white screen appears, no Google logo appears.

activity_maps2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1c1356"
android:orientation="vertical">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
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="com.porteradvertising.richmondmeltdown2.MapsActivity" />

</LinearLayout>

Maps_Activity.Java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps2);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


/**
 * Manipulates the map once available.
 * This callback is triggered when the map is ready to be used.
 * This is where we can add markers or lines, add listeners or move the camera. In this case,
 * we just add a marker near Sydney, Australia.
 * If Google Play services is not installed on the device, the user will be prompted to install
 * it inside the SupportMapFragment. This method will only be triggered once the user has
 * installed Google Play services and returned to the app.
 */
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

}

Pager Adapter.Java

public class PagerAdapter extends FragmentPagerAdapter {

String title;
Context context;

public PagerAdapter(FragmentManager fm) {
    super(fm);


}

@Override
public android.support.v4.app.Fragment getItem(int arg0) {
    switch (arg0) {
        case 0:
            return new FragmentTwo();
        case 1:
            return new FragmentOne();
        case 2:
            return new android.support.v4.app.Fragment();
        case 3:
            return new FragmentThree();
        default:
            break;
    }
    return null;
}

@Override
public int getCount() {
    return 4;
}

String[] titles = {"Home", "Schedule","Map","General Info"};

@Override
public CharSequence getPageTitle(int position) {
    return titles[position];
}
}

First, you should extend Fragment instead of FragmentActivity in your MapsActivity

and use

case 2:
            return new MapsActivity();

instead of

case 2:
            return new android.support.v4.app.Fragment();

and in your MapsActivity's onCreateView use this Snippet of code

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_maps2,container,false);
        MapView mapView = (MapView) view.findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);
        mapView.onResume(); // needed to get the map to display immediately
        return view;
    }

and make sure you have your API Key in your manifest like this

<application 
....
...>
 <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="YOUR_API_KEY" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM