Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-将标记添加到活动的片段映射中_Android_Google Maps_Fragment - Fatal编程技术网

android-将标记添加到活动的片段映射中

android-将标记添加到活动的片段映射中,android,google-maps,fragment,Android,Google Maps,Fragment,我需要添加一个标记到一个来自MainActivity的Android谷歌地图(片段) 这是我的密码 class Map extends android.app.Fragment implements OnMapReadyCallback @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ret

我需要添加一个标记到一个来自MainActivity的Android谷歌地图(片段)

这是我的密码

class Map extends android.app.Fragment implements OnMapReadyCallback


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

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

        MapFragment fragment = (MapFragment)getChildFragmentManager().findFragmentById(R.id.map);
        fragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        LatLng marker = new LatLng(19.33978502, -99.19086277);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 15));
        googleMap.addMarker(new MarkerOptions().title("Marca de Prueba 1").position(marker));
    }
}
我想在这里添加一个标记:

所有这些都是因为我想从我的主要活动中与我的地图交互,在这里我有一些按钮和编辑文本

main活动

public class MainActivityextends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener
{

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

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, new Mapa()).commit();
}

您只需要在片段中定义一个可以从活动调用的公共方法:

class Mapa extends android.app.Fragment implements OnMapReadyCallback

    GoogleMap mMap;

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

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

        MapFragment fragment = (MapFragment)getChildFragmentManager().findFragmentById(R.id.map);
        fragment.getMapAsync(this);
    }

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

    //Added public method to be called from the Activity
    public void placeMarker(String title, double lat, double lon) {
      if (mMap != null) {
        LatLng marker = new LatLng(lat, lon);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 15));
        mMap.addMarker(new MarkerOptions().title(title).position(marker));
      }
    }
}
然后,在活动中,保留对片段的引用,以便调用
placeMarker()
方法:

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

  private Mapa mMapFragment;

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

      mMapFragment = new Mapa();
      FragmentManager fm = getFragmentManager();
      fm.beginTransaction().replace(R.id.content_frame, mMapFragment).commit();
  }

  private void placeMarkerInMap(String title, double lat, double lon) {
    if (mMapFragment != null) {
       mMapFragment.placeMarker(title, lat, lon); 
    }
  }
}
然后,当用户填写编辑文本并单击按钮时,可以在活动中调用
placeMarkerInMap()
方法

请注意,如果在执行
onMapReady()
回调之前尝试调用此方法,则不会有有效的GoogleMap引用用于放置标记。
如果需要在活动的初始启动时放置标记,则需要在FragmentTransaction中使用参数

谢谢大家!!我照你说的做了,但当我调用主Activity上的placeMarker方法时,它说无法解决:有什么想法吗?我的片段叫做Mapa*@joscarillo我知道问题出在哪里了。我刚刚更新了答案。声明实际上应该是
private Mapa mMapFragment,更改它,它就会工作。谢谢!现在是工作,我必须改变placeMarker方法静态和谷歌地图mMap也静态。非常感谢@JosCarrillo我不建议将其设置为静态。。。。你应该能够使它工作而不使它静止!