Android谷歌地图xml R.id在片段中未定义

时间:2015-02-22 08:35:57

标签: android google-maps android-layout android-fragments

我正在开发一个使用导航抽屉活动的应用程序。我在抽屉里有两个片段,其中一个是谷歌地图。

在地图片段类中,我想初始化GoogleMap对象以对地图执行某些操作,但在通过inflater初始化视图后的onCreateView中,我的应用程序在R类中找不到要初始化的ID谷歌地图。

我通过以下方式调用活动中的片段:



FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
					fragmentTransaction.add(R.id.mainContent, map, Map.class.getSimpleName());
					fragmentTransaction.addToBackStack(Map.class.getSimpleName());
					fragmentTransaction.commit();




容器xml:



<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/mainContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>

    <ListView
        android:id="@+id/drawerList"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/background_color" >
    </ListView>

</android.support.v4.widget.DrawerLayout>
&#13;
&#13;
&#13;

layout_fragment_map.xml:

&#13;
&#13;
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
&#13;
&#13;
&#13;

Map片段类:

&#13;
&#13;
public class Map extends Fragment {
	
	private View view;
	private MapFragment mapFragment;
	private GoogleMap googleMap;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		if (view != null) {
	        ViewGroup parent = (ViewGroup) view.getParent();
	        if (parent != null)
	            parent.removeView(view);
	    }
	    try {
	        view = inflater.inflate(R.layout.layout_fragment_map, container, false);
	    } catch (InflateException e) {
	        /* map is already there, just return view as it is */
	    }
	    
	    mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
	    googleMap = mapFragment.getMap();
	    
	    return view;
	}
&#13;
&#13;
&#13;

在行中:

&#13;
&#13;
mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
&#13;
&#13;
&#13;

R.id.map未定义Eclipse提供&#34;无法解析类型&#34;。

缺少某些东西或我的整个概念都有问题?

谢谢你,编码愉快!

1 个答案:

答案 0 :(得分:0)

我通过修改行来解决了这个问题:

 mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.googleMap);

mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.googleMap);

这很奇怪,因为R.id.googleMap仍然未定义,但对象被正确创建。