【发布时间】:2013-12-06 08:22:40
【问题描述】:
好的,我已经检查了大约 100 个 SO QA。
故事是这样的:我有一个 SlidingMenu,其中包含“创建事件”和“所有事件”项。 “创建事件”菜单有一个地图片段,如下所示。用户选择“创建事件”并且地图在屏幕上没有错误,然后用户选择“所有事件”并显示事件并且用户再次选择“创建事件”并繁荣:
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();
}
create_event.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>
...
CreateEventFragment.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();
}
【问题讨论】:
-
您是否正在寻找表现完全相同的两张地图?如果我在一张地图中滚动,另一张地图也应该滚动吗?
-
@gian1200 你为什么这么说,这样做完全没问题
-
首先,要么正确使用嵌套片段(using
getChildFragmentManager()),要么不使用嵌套片段(例如,子类SupportMapFragment,而不是包装它)。其次,永远不要自己调用生命周期方法,例如您在initGoogleMaps()中进行的onCreate()和onResume()调用。如果这些都没有帮助,问题可能出在showFragment()。发布此方法的实现和完整的堆栈跟踪。 -
谢谢。我调用了生命周期方法来测试另一个答案,你是对的。我编辑了我的问题并添加了 showFragment 方法。
标签: android google-maps android-fragments