我需要从 MainActivity 向 Android Google 地图(片段)添加标记
这是我的代码;
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));
}
}
我想在这里添加一个标记:
所有这些都是因为我想从我的主要活动中与我的地图进行交互,其中我有一些按钮和编辑文本
主要活动
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();
}
这是它的样子,已经有了一个标记,但是我需要在MainActivity中设置它,而不是从map activity中调用它
您只需要在片段中定义一个可以从Active调用的公共方法:
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));
}
}
}
然后,在活动中,保留对片段的引用,以便您可以调用< code>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);
}
}
}
然后,当用户填写EditText并单击按钮时,您可以在Active中调用place eMarkerInMap()
方法。
请注意,如果尝试在执行 onMapReady()
回调之前调用此方法,则不会有有效的 GoogleMap 引用可用于放置标记。如果需要在从活动初始启动时放置标记,则需要在 FragmentTransaction 中使用参数。有关更多详细信息,请参阅此处。
代码如下:- 产品片段: 我不知道我错在哪里。我已经搜索了错误,甚至尝试了以下链接的解决方案: Fragment MyFragment not attached to activity 我在SO上提出问题,但没有得到响应/答案。可能有一个小错误、语法/格式问题或重复问题,但我的案例可能与其他人的不同。 因此,请提供帮助并作出答复。 谢谢。 --编辑-- 家庭活动: 致命异常:主进程:com.pis
我正在学习Android Udacity课程,它已经过时了,所以我尝试通过手动添加一个片段到主活动中来更新它。这段代码构建得很好,但是当应用程序启动时,在android monitor中出现了一个很长的错误。 XML fragment_main.xml activity_main.xml list_itemm_forecast.xml 日志 06-23 11:23:02.878 3095-3095
我想在Android的一个活动中添加两个片段。但在加法时,它给出了错误; activity_main.xml 片段的布局1 片段2的布局
我是Android开发的新手,我在将firebase auth从SignInActivity传递到HomeFragment上有一个问题。代码是这样的 公共类SignInActivity扩展AppCompatActivity } 这是HomeFragment片段 公共类HomeFragment扩展Fragment{ } 这是logcat 致命异常:主进程:clouwiko.dev.prasiku,P
//使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃
我有一个活动,它从其他活动中获取一些字符串: 这行得通。 从这个活动< code>ShowPoints中,我想将接收到的字符串< code>points发送到它的片段< code>PointsOnMap 为此,我创建了并执行以下操作: 但是,片段<code>PointsOnMap<code>的<code>字符串点 我想知道我做错了什么。我在这里阅读了其他一些帖子,似乎我正在以正确的方式做到这一点。