【发布时间】:2014-05-31 18:02:58
【问题描述】:
当我单击包含地图的片段的按钮时,地图会显示。当我再次单击它或单击另一个片段按钮,然后再次单击包含地图的片段的按钮时,我的应用程序强制退出,我在 LogCat 中得到了这个解释:
致命异常:main
android.view.InflateException:BINARY XML 文件第 8 行:膨胀类片段时出错
...
原因:java .lang.IllegalArgumentException: Binary XML file line: #8: Duplicate id 0x7f070053, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
怎么办?我猜这可能与片段事务管理器有关,但我真的不知道?
Fragment01.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
</LinearLayout>
Fragment01.java
public class Fragment01 extends Fragment {
MapView mapView;
GoogleMap map;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_01, container, false);
return v;
}
@Override
public void onDestroy()
{
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
}
@Override
public void super.onDestroyView()
{
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
}
@Override
public void onDestroyView()
{
Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
}
}
MainActivity.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
StartFragment startfragment = new StartFragment();
transaction.add(R.id.fragment_placeholder, startfragment);
transaction.commit();
}
public void onSelectFragment(View view){
Fragment newFragment;
if (view == findViewById(R.id.btnomforetaget)) {
newFragment = new StartFragment();
} else if (view == findViewById(R.id.btnhittahit)) {
newFragment = new Fragment01();
} else if (view == findViewById(R.id.btnhemsida)) {
newFragment = new Fragment02();
} else {
newFragment = new StartFragment();
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_placeholder, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
【问题讨论】:
标签: android android-fragments android-maps-v2