【发布时间】:2016-05-13 08:19:39
【问题描述】:
我正在使用 Google 地图制作 Android 应用程序。我在显示包含地图的片段时遇到问题。第一次我没有例外,但如果我返回地图,我会遇到这个例外:
android.view.InflateException: 二进制 XML 文件第 28 行:膨胀类片段时出错由
java.lang.IllegalArgumentException引起: 二进制 XML 文件第 28 行:重复 id0x7f0d0090、标签 null 或父 id0xffffffff与com.google.android.gms.maps.SupportMapFragment的另一个片段。
The stacktrace you can find on Pastebin.
这是我的片段上的代码
public class RoeteFragment extends Fragment implements OnMapReadyCallback {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// exception thrown on line below
return inflater.inflate(R.layout.fragment_roete, container, false);
}
@Override
public void onMapReady(GoogleMap googleMap) {
// not so important code for the question.
}
public static Fragment newInstance() {
return new RoeteFragment();
}
}
在这里你可以找到xml文件fragment_roete:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.google.android.gms.maps.SupportMapFragment"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/map"/>
</RelativeLayout>
这是我用RoeteFragment替换旧片段的方法:
_fragmentReplaceListener.newFragment(RoeteFragment.newInstance(_roete));
请注意上面的代码: _fragmentReplaceListener 是在 MainActivity 上的一个接口声明,包含以下代码:
@Override
public void newFragment(Fragment fragment) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.frmlytContentMain, fragment);
transaction.addToBackStack("transaction_fromOldFragment_toNewFragment");
transaction.commit();
}
请注意上面的代码: frmlytContentMain 是 FrameLayout。
【问题讨论】:
标签: android google-maps android-fragments inflate-exception