在Fragment中设置GoogleMaps

时间:2013-11-14 15:43:01

标签: java android android-fragments

我有一个带横向栏的FragmentActivity(比如菜单栏),还有一个容器可以将碎片放在那里。 从这个FragmentActivity我使用每个按钮的onClickListener(从横向栏)调用其他片段。

例如,FragmentActivity被称为MenuViewActivity。这会调用Navigation片段并在容器上设置它的布局。

Navigation片段中,我有一个启动GoogleMaps的按钮(或我需要的

[MenuViewActivity(FragmentActivity)]>> [NavigationFragment(Fragment)]>> [GoogleMapsFragment(片段)

我们的想法是将GoogleMaps窗口放在我设置其他片段的同一容器中(如navigationFragment)

这是 NavigationFragment.java

的代码
public class NavigationFragment extends Fragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    /**Inflate the layout for this fragment*/
    View mainView = inflater.inflate(R.layout.navegacion, container, false);

    mapBtn = (ImageView) mainView.findViewById(R.id.mapsButton);
    navBtn = (ImageView) mainView.findViewById(R.id.navigatorButton);

    mapBtn.setOnClickListener(this);
    navBtn.setOnClickListener(this);

    return mainView;
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.mapsButton:
            GoogleMapsFragment fragment_maps = new GoogleMapsFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.fragment_container, fragment_maps).commit();
            break;
    }
}

这是 GoogleMapsFragment.java

的代码
public class GoogleMapsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    /**Inflate the layout for this fragment*/
    View mainView = inflater.inflate(R.layout.google_maps, container, false);

    SupportMapFragment fm = (SupportMapFragment)  getFragmentManager().findFragmentById(R.id.map);
    mMap = fm.getMap();

    return mainView;
}

google_maps.xml 的代码:

<fragment 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"
map:cameraTilt="45"
map:cameraZoom="14"
class="com.google.android.gms.maps.SupportMapFragment" />

我认为我没有在 onClick 上调用 GoogleMapsFragment ,或者我不能像其他人那样从其他片段调用* fragment_container * NavigationFragment ,因为此ID属于 MenuViewActivity 的布局。

logCat输出是这样的:

android.view.InflateException: Binary XML file line #3: Error inflating class fragment
    at com.example.GoogleMapsFragment.onCreateView(GoogleMapsFragment.java:47)
Caused by: java.lang.IllegalStateException: A required meta-data tag in your app's 
    AndroidManifest.xml does not exist.  You must have the following declaration within the <application> element:     
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

1 个答案:

答案 0 :(得分:0)

Exception告诉你究竟是什么问题。自上次更新google-play-services_lib以来,您需要将以下内容添加到应用标记内的AndroidManifest.xml中:

 <meta-data android:name="com.google.android.gms.version" 
android:value="@integer/google_play_services_version" />

另外,你有:

  

机器人:名称= “com.google.android.gms.maps.MapFragment”   类= “com.google.android.gms.maps.SupportMapFragment”

您应该只拥有此属性之一。这里有两个,它们指向两个不同的类。如果您想要向后兼容,则应使用com.google.android.gms.maps.SupportMapFragment

一个建议。如果您只需要显示地图,为什么不是extends SupportMapFragmentMapFragment而不是Fragment