【问题标题】:Loading fragment (with google map) gives exception when return加载片段(使用谷歌地图)返回时出现异常
【发布时间】:2016-05-13 08:19:39
【问题描述】:

我正在使用 Google 地图制作 Android 应用程序。我在显示包含地图的片段时遇到问题。第一次我没有例外,但如果我返回地图,我会遇到这个例外:

android.view.InflateException: 二进制 XML 文件第 28 行:膨胀类片段时出错

java.lang.IllegalArgumentException 引起: 二进制 XML 文件第 28 行:重复 id 0x7f0d0090、标签 null 或父 id 0xffffffffcom.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();
}

请注意上面的代码: frmlytContentMainFrameLayout

【问题讨论】:

标签: android google-maps android-fragments inflate-exception


【解决方案1】:

使用 MapFragment 代替 SupportMapFragment

<fragment 
android:id="@+id/map"
class="com.google.android.gms.maps.MapFragment"
              android:layout_height="match_parent"
              android:layout_width="match_parent"
              />

【讨论】:

  • 然后使用@Override public void newFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.frmlytContentMain,片段); transaction.addToBackStack("transaction_fromOldFragment_toNewFragment");事务.commit(); }
  • 问题是,如果我这样做,我会遇到其他 3 个片段的问题,我将用相同的代码替换它们。所以我有this error。无论如何,我的问题现在由this answer 解决。感谢您的建议。
  • 好吧,伙计享受继续发布问题,我会在那里寻求帮助:P
猜你喜欢
  • 2011-05-19
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多