Android 从片段获取地图视图实例

Android 从片段获取地图视图实例,android,google-maps,android-fragments,google-maps-android-api-2,supportmapfragment,Android,Google Maps,Android Fragments,Google Maps Android Api 2,Supportmapfragment,我有一个MainFragment,它由两个片段组成,一个MapFragment和一个ListFragment,这是它的布局: main片段布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:m

我有一个
MainFragment
,它由两个片段组成,一个
MapFragment
和一个
ListFragment
,这是它的布局:

main片段布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/cups_black" >

<fragment
    android:id="@+id/map_fragment"
    android:name="com.citylifeapps.cups.fragments.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" /> 

</RelativeLayout>

 <RelativeLayout 
    android:id="@+id/black_layout"
    android:layout_marginTop="160dp"         
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/cups_black"
    android:visibility="gone" >
</RelativeLayout>

<fragment
    android:id="@+id/list_fragment"
    android:name="com.citylifeapps.cups.fragments.ListFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 <Button
     android:id="@+id/button_close_full_map"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignParentBottom="true"
     android:layout_centerHorizontal="true"
     android:layout_margin="10dp"
     android:background="@drawable/map_close_button_selector"
     android:text="@string/close"
      android:visibility="gone"
     android:textColor="@color/cups_black" />

 <Button
     android:id="@+id/button_show_path"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignParentBottom="true"
     android:layout_alignParentRight="true"
     android:layout_margin="10dp"
     android:paddingLeft="10dp"
     android:paddingRight="10dp"
     android:background="@drawable/map_close_button_selector"
     android:text="@string/show_path"
     android:visibility="gone"
     android:textColor="@color/cups_black" />

  <Button
      android:id="@+id/button_navigate"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_above="@+id/button_show_path"
      android:layout_alignParentRight="true"
      android:layout_marginRight="10dp"
      android:background="@drawable/map_close_button_selector"
      android:paddingLeft="10dp"
      android:paddingRight="10dp"
      android:text="@string/navigate"
      android:visibility="gone"
      android:textColor="@color/cups_black" />

 </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapview"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraTargetLat="32.062505"
map:cameraTargetLng="34.778651"
map:cameraZoom="12"
map:mapType="normal"
map:uiZoomControls="false"
map:uiRotateGestures="true"
map:uiScrollGestures="true"
map:uiZoomGestures="true"
map:uiTiltGestures="false" />
我想使用
FragmentManager
添加这个片段,然后获取
mapview
基本上就是
SupportMapFragment
,所以我要做的是:

getSupportFragmentManager().beginTransaction()
    .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
    .add(R.id.content, MainFragment.create(), "Main Fragment")
    .commit();
要将此片段添加到
活动
,然后尝试获取
地图视图

smf = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapview);
但我在这里得到零


因此,问题是:在这种情况下,如何获取地图视图的实例?

因为MapFragment是子片段,所以需要使用childFragmentManager而不是SupportFragmentManager

因此,您需要执行以下操作:

MainFragment mainFragment = (MainFragment)getSupportFragmentManager.findFragmentById(R.id.content);

MapFragment mapFragment = (MapFragment) mainFragment.getChildFragmentManager().findFragmentById(R.id.map_fragment);

SupportMapFragment supportMap = (SupportMapFragment)mapFragment.getChildFragmentManager().findFragmentById(R.id.mapview);
这是未经测试的代码,但应该为您指明正确的方向

但需要注意的是:您似乎有一个额外的子片段,您不需要它

MapFragment片段看起来只是一个包含SupportMapFragment的片段。
如果没有必要,您应该尽量避免过多的子片段。用SupportMapFragment完全替换MapFragment,或者在MapFragment中自己实现mapview。

因为MapFragment是子片段,所以需要使用childFragmentManager而不是SupportFragmentManager

因此,您需要执行以下操作:

MainFragment mainFragment = (MainFragment)getSupportFragmentManager.findFragmentById(R.id.content);

MapFragment mapFragment = (MapFragment) mainFragment.getChildFragmentManager().findFragmentById(R.id.map_fragment);

SupportMapFragment supportMap = (SupportMapFragment)mapFragment.getChildFragmentManager().findFragmentById(R.id.mapview);
这是未经测试的代码,但应该为您指明正确的方向

但需要注意的是:您似乎有一个额外的子片段,您不需要它

MapFragment片段看起来只是一个包含SupportMapFragment的片段。
如果没有必要,您应该尽量避免过多的子片段。用SupportMapFragment完全替换MapFragment,或者在MapFragment中自己实现mapview。

因为MapFragment是子片段,所以需要使用childFragmentManager而不是SupportFragmentManager

因此,您需要执行以下操作:

MainFragment mainFragment = (MainFragment)getSupportFragmentManager.findFragmentById(R.id.content);

MapFragment mapFragment = (MapFragment) mainFragment.getChildFragmentManager().findFragmentById(R.id.map_fragment);

SupportMapFragment supportMap = (SupportMapFragment)mapFragment.getChildFragmentManager().findFragmentById(R.id.mapview);
这是未经测试的代码,但应该为您指明正确的方向

但需要注意的是:您似乎有一个额外的子片段,您不需要它

MapFragment片段看起来只是一个包含SupportMapFragment的片段。
如果没有必要,您应该尽量避免过多的子片段。用SupportMapFragment完全替换MapFragment,或者在MapFragment中自己实现mapview。

因为MapFragment是子片段,所以需要使用childFragmentManager而不是SupportFragmentManager

因此,您需要执行以下操作:

MainFragment mainFragment = (MainFragment)getSupportFragmentManager.findFragmentById(R.id.content);

MapFragment mapFragment = (MapFragment) mainFragment.getChildFragmentManager().findFragmentById(R.id.map_fragment);

SupportMapFragment supportMap = (SupportMapFragment)mapFragment.getChildFragmentManager().findFragmentById(R.id.mapview);
这是未经测试的代码,但应该为您指明正确的方向

但需要注意的是:您似乎有一个额外的子片段,您不需要它

MapFragment片段看起来只是一个包含SupportMapFragment的片段。

如果没有必要,您应该尽量避免过多的子片段。可以将MapFragment完全替换为SupportMapFragment,也可以在MapFragment中自己实现mapview。

您应该拥有一个地图视图,而不是SupportMapFragment。我想你希望在片段中有一个映射。实际上,这是我从其他开发人员那里继承的一个实现,大多数应用程序都依赖于这个实现,所以我现在不能更改它,而且片段级联是允许的。有没有一种方法可以像现在这样得到它的实例呢?没有,在布局中没有太多的改变,只有一个映射视图,并在fragment中初始化映射视图。检查这个,如果它帮助我知道没有太多的工作,但我仍然可以改变它的实施现在。。。我必须保持原样。。。很抱歉,这对我没有帮助。你应该有一个地图视图而不是supportmapfragment。我想你希望在片段中有一个映射。实际上,这是我从其他开发人员那里继承的一个实现,大多数应用程序都依赖于这个实现,所以我现在不能更改它,而且片段级联是允许的。有没有一种方法可以像现在这样得到它的实例呢?没有,在布局中没有太多的改变,只有一个映射视图,并在fragment中初始化映射视图。检查这个,如果它帮助我知道没有太多的工作,但我仍然可以改变它的实施现在。。。我必须保持原样。。。很抱歉,这对我没有帮助。你应该有一个地图视图而不是supportmapfragment。我想你希望在片段中有一个映射。实际上,这是我从其他开发人员那里继承的一个实现,大多数应用程序都依赖于这个实现,所以我现在不能更改它,而且片段级联是允许的。有没有一种方法可以像现在这样得到它的实例呢?没有,在布局中没有太多的改变,只有一个映射视图,并在fragment中初始化映射视图。检查这个,如果它帮助我知道没有太多的工作,但我仍然可以改变它的实施现在。。。我必须保持原样。。。很抱歉,这对我没有帮助。你应该有一个地图视图而不是supportmapfragment。我想你希望在片段中有一个映射。实际上,这是我从其他开发人员那里继承的一个实现,大多数应用程序都依赖于这个实现,所以我现在不能更改它,而且片段级联是允许的。有没有一种方法可以像现在这样得到它的实例呢?没有,在布局中没有太多的改变,只有一个映射视图,并在fragment中初始化映射视图。检查这个,如果它帮助我知道没有太多的工作,但我仍然可以改变它的实施现在。。。我必须保持原样。。。很抱歉,但这对我没有帮助。我不知道有一个儿童碎片管理器。我想这会让我走上正确的方向。谢谢,我会的