gpt4 book ai didi

android - 我有一个 map fragment Activity ,我想将其转换为 fragment

转载 作者:太空狗 更新时间:2023-10-29 15:00:45 25 4
gpt4 key购买 nike

public class Trees extends FragmentActivity implements GoogleMap.OnMarkerClickListener {

private GoogleMap mMap;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trees);
setUpMapIfNeeded();
}

@Override
protected void onResume() {
super.onResume();
setUpMap();
}

private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMyLocationEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude),17));
}
}
}

最佳答案

首先,将您的 FragmentActivity 更改为 Fragment。此外,由于 MapFragment 也是一个 fragment ,因此您现在将拥有嵌套的 fragment 。有很多解决方案/技巧可用于使用嵌套 fragment (对于您的情况,它是 fragment 内的 MapFragment)。但最推荐的方法是将 MapFragment 动态添加到您的 Fragemnt。为此,您必须遵循这些简单的步骤。

首先,您应该像这样在 mapfragment.xml 中简单地设置一个 FrameLayout

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android
android:id="@+id/fl_map"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>

现在你必须在你的 Fragment 中动态添加 SupportMapFragment

private SupportMapFragment fragment;

在您的 onActivityCreated() 中,复制此代码

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();

if (fragment == null) {
fragment = SupportMapFragment.newInstance();
fm.beginTransaction().replace(R.id.fl_map, fragment).commit();
}
}

因为 FragmentTransaction 需要一些时间,所以你必须像这样在 onResume() 中初始化你的 map

    @Override
public void onResume() {
super.onResume();
if (mMap == null)
mMap = fragment.getMap();
try {
if (mMap != null) {
builder = new LatLngBounds.Builder();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.getUiSettings().setZoomControlsEnabled(false);
mMap.getUiSettings().setZoomGesturesEnabled(true);
mMap.setMyLocationEnabled(true);

// do whatever you want to do with map
}
} catch (Exception e) {
e.printStackTrace();
}
}

另外不要忘记在 Fragment 的 onDetach() 中添加这段代码

@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);

} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (Exception e) {
e.printStackTrace();
}

}

希望对您有所帮助。

关于android - 我有一个 map fragment Activity ,我想将其转换为 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com