java - 使用 FragmentManager 和 FragmentTransaction 将 Map Fragment 动态添加到 Activity 中

标签 java android google-maps android-layout android-fragments

我一直在搜索很多有关将 map fragment 添加到 Activity 中并执行 fragment 事务以添加和删除 map fragment 的信息,就像普通 fragment 一样。我在 stackoverflow 上找到了很多旧帖子,但大多数人都使用 getMap() 方法来获取googleMap 对象,但当前版本的 map 没有 getMap() 方法,但它有 getMapAsync() 所以我找到的解决方案不是我正在寻找的解决方案。 我发现也有人用这个 GoogleMap map=((MapFragment)getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap() 但这里 getMap() 在当前版本的 map 中也未定义。 那么任何人都可以给我一个正确的指导来实现。 这是代码,我想如何实现这一目标:

public class MainActivity extends Fragment{
GoogleMap map;
MapView v;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.activity_main,container,false);
    return view;
}

}

其中activity_main是包含Map fragment 的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.kamaloli.mapdemo.MainActivity">
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main_activity_map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.kamaloli.mapdemo.MainActivity" />
</RelativeLayout>

所以我想做的就是像普通 fragment 一样使用 fragment 事务将此 fragment 添加到另一个 Activity 中。

最佳答案

将此 map fragment 添加到 fragment (MapFragment)布局文件中:

     <com.google.android.gms.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

公开声明mapview和googlemap:

private MapView mapView;
private GoogleMap googleMap;

将以下代码添加到 onViewCreated() 中:

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

在您的 fragment 中实现 OnMapReadyCallback 并添加此方法:

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

在activity_main.xml中添加一个容器:

     <FrameLayout
        android:id="+@id/container"
        android:layout_width = "match_parent" 
        android:layout_height = "match_parent">

       // Add all activity contents here

     <FrameLayout/>

将此容器替换为 MapFragment:

FragmentManager fm = getFragmentManager():
fm.beginTransaction.replace(R.id.container, new MapFragment()).commit(); 

希望这有帮助。

关于java - 使用 FragmentManager 和 FragmentTransaction 将 Map Fragment 动态添加到 Activity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604861/

相关文章:

java - 如何将 if else 语句中的每个系统输出存储到一个解决方案字符串中

android - 为我的项目启用 Google Cloud Build API 时出错?

android - 使用 Android NDK 时是否可以使用原生 AAC 解码器?

javascript - 带有 iframe 的 Google map 在页面加载后不起作用

java - 使用递归函数在 Java 中进行垃圾收集

java - For 循环协助

google-maps - 如何在当前缩放级别上获取所有可见标记

json - Play Framework : Request_denied when getting json from googlemap url

java - 无类 已注册云端点

java - onPrepareOptionsMenu 的开关