gpt4 book ai didi

android - 无法将 fragment 中的 Google Maps API v2 膨胀两次

转载 作者:行者123 更新时间:2023-11-29 01:47:41 26 4
gpt4 key购买 nike

好的,我已经检查了大约 100 个 SO QA。

故事是这样的:我有一个 SlidingMenu,可以说是“创建事件”和“所有事件”项目。 “创建事件”菜单有一个 map fragment ,如下所示。用户选择“创建事件”并且 map 在屏幕上没有错误,然后用户选择“所有事件”并显示事件并且用户再次选择“创建事件”并且繁荣:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #45: Duplicate id 0x7f040058, tag null, or parent id 0x0 with another fragment for pl.mg6.android.maps.extensions.SupportMapFragment

CreateEventFragment 在每次用户从左侧菜单中选择时创建:

public void showCreateNewEventFragment() {
CreateEventFragment fragment = new CreateEventFragment();
showFragment(fragment);
slidingMenu.showContent();
}

创建事件.xml

...    
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/searchLayout"
android:layout_marginTop="8dp"
android:background="@color/app_color"
android:padding="6dp" >

<fragment
android:id="@+id/map"
android:name="pl.mg6.android.maps.extensions.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
...

创建事件 fragment .java

public class CreateEventFragment extends BaseFragment {

private GoogleMap mMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
View v = (View) inflater.inflate(R.layout.create_event, container,
false);
((MainActivity) getActivity())
.showSlidingMenu(LeftNavigation.ITEM_CREATE_NEW_EVENT);
initGoogleMaps(v, savedInstanceState);
return v;
}

private void initGoogleMaps(View v, Bundle savedInstanceState) {
EventshipApplication app = (EventshipApplication) getActivity()
.getApplication();
SupportMapFragment mMapFragment = ((SupportMapFragment) getActivity()
.getSupportFragmentManager().findFragmentById(R.id.map));
mMap = mMapFragment.getExtendedMap();
mMap.getUiSettings().setMyLocationButtonEnabled(true);
}
}

所以,我希望能够创建/使用 MapFragment 两次以上。有什么建议/解决方法吗?

编辑:

public void showFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction().add(android.R.id.content, fragment);
transaction.addToBackStack(null);
transaction.commit();
}

最佳答案

使用 replace() 而不是 add(),因为您已经在第二个 android.R.id.content 中有了 fragment 您调用 showFragment() 的时间。

您可能还需要将之前的事务从返回堆栈中弹出,或者摆脱 addToBackStack() 调用。

关于android - 无法将 fragment 中的 Google Maps API v2 膨胀两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411128/

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