0

我一直在試圖在抽屜佈局中插入使用Android Studio的片段地圖。我已經實現了顯示地圖,但我不能添加標記。我想知道我做錯了什麼。有沒有其他的方式來添加地圖到抽屜佈局?添加谷歌地圖api v2在抽屜文件中的片段

這裏是我的MainActivity:

package com.example.alex.testing_map; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
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.Menu; 
import android.view.MenuItem; 


public class MapsActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(
      this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer); 

    drawerLayout.setDrawerListener(drawerToggle); 
    drawerToggle.syncState(); 

    Fragment fragment = new MapFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.frame_content, fragment); 
    ft.commit(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) { 
     drawerLayout.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item){ 

    switch (item.getItemId()){ 
     case R.id.add_item: 
      Intent intent = new Intent(this, AddMail.class); 
      this.startActivity(intent); 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

    return true; 

} 


@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    Fragment fragment = null; 

    switch (item.getItemId()){ 
     case R.id.mapa: 
      fragment = new MapFragment(); 
      FragmentTransaction ft1 = getSupportFragmentManager().beginTransaction(); 
      ft1.replace(R.id.frame_content, fragment); 
      ft1.commit(); 
      break; 
     case R.id.help: 
      fragment = new Help(); 
      FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction(); 
      ft2.replace(R.id.frame_content, fragment); 
      ft2.commit(); 
      break; 
     case R.id.about: 
      break; 
     default: 
      return true; 

    } 

    DrawerLayout drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); 
    drawerLayout.closeDrawer(GravityCompat.START); 
    return true; 
} 


} 

我MapFragment:

package com.example.alex.testing_map; 

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.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; 


public class MapFragment extends Fragment implements OnMapReadyCallback{ 


private GoogleMap mMap; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.map_fragment, viewGroup, false); 
    return view; 


} 



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


    mMap.getUiSettings().setCompassEnabled(false); 
    mMap.getUiSettings().setIndoorLevelPickerEnabled(false); 
    mMap.getUiSettings().setMapToolbarEnabled(false); 
    mMap.getUiSettings().setRotateGesturesEnabled(false); 
    mMap.getUiSettings().setZoomControlsEnabled(false); 


    LatLng p1 = new LatLng(41.39355, 2.15473); 
    mMap.addMarker(new MarkerOptions().position(p1)); 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(p1, 18)); 


} 

} 

有了這個一切都運行良好,但指標不顯示。我一直在努力,這(我發現,所有的變體)添加到MapFragment類,但它說:「無法解析法‘getSupportFragmentManager’」:

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

我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="match_parent" 
android:layout_width="match_parent"> 

<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="513dp" 
tools:context="com.example.alex.testing_map.MapsActivity" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true"/> 

</RelativeLayout> 

回答

0

我找到了解決方案!我遵循老闆給出的答案:Trying to put a map in a fragment activity

我只是改變了一點點。我沒有在事務中添加片段,而是替換了它(在MapFragment.java中),然後在MainActivity中的onCreate中添加了片段而不是替換它。

在MainActivity(所述的onCreate內側):

Fragment fragment = new MapFragment(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(R.id.frame_content, fragment); 
    ft.commit();