膨胀类片段时出错

时间:2015-03-04 16:38:25

标签: java android xml android-fragments

我试图在片段内充气地图片段,如下面的代码:

public class HomeFragment extends Fragment {

    public HomeFragment(){}
    public GoogleMap mMap;
    private LocalizeDB db;
    private FragmentActivity myContext;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.activity_maps, container, false);

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }
}

activity_maps.xml代码

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map"
tools:context=".MapsActivity"
android:name="com.google.android.gms.maps.SupportMapFragment"/>

我收到以下错误:二进制XML文件行#1:错误导致类片段

如果不是inflate activity_maps.xml,我会膨胀fragment_home.xml,它可以工作。但我需要给地图片段充气......(activity_maps.xml)

fragment_home.xml代码:

    <?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">

    <TextView
        android:id="@+id/txtLabel"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="16dp"
        android:text="Home View"/>

    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtLabel"
        android:src="@drawable/ic_home"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"/>

</RelativeLayout>

3 个答案:

答案 0 :(得分:1)

更改

android:name="com.google.android.gms.maps.SupportMapFragment"

class="com.google.android.gms.maps.SupportMapFragment

&#34;

答案 1 :(得分:1)

如果在片段中扩充该布局,我们就无法使用静态MapFragments。相反,你可以在xml和java类中使用FrameLayout,你应该动态地用Map片段替换该容器。

例如:

 <FrameLayout   xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
           android:layout_width="match_parent"
          android:layout_height="match_parent"
           android:id="@+id/map"
           tools:context=".MapsActivity"/>

并且在java文件中你应该替换下面的片段容器:

 @Override
public View onCreateView(LayoutInflater inflater,
        ViewGroup container, Bundle    savedInstanceState) {
    return inflater.inflate(R.layout.activity_maps, container, false);
}

   @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().replace(R.id.map, new SupportMapFragment()).commit();

}

我认为应该有所帮助。如果需要,请随时提出任何澄清。

答案 2 :(得分:0)

我错过了AndroidManifest.xml中的Google Maps API KEY